首页 > PHP资讯 > HTML5培训技术 > Javascript作用域链

Javascript作用域链

HTML5培训技术

片段一:输出0123456789100

function test(){         var i = 0;        if(1==1){            var j = 0;                                 for(var k=0; k < 10; k++){                document.write(k);            }            document.write(k);                    }        document.write(j);                    }test();

片段二:输出undefined

function test(){         var i = 0;        if(1==2){            var j = 0;                                 for(var k=0; k < 10; k++){                document.write(k);            }            document.write(k);                    }        document.write(j);                    }test();


根据以上理解说明JS初始化的过程:

在JS解释器执行任何代码之前,创建全局对象

用预定义的值和函数来初始化全局对象中的属性,eg.Math,Infinity,parseInt
搜索函数外的var声明,创建全局对象相应的属性,初始化为undefined
创建全局的执行环境,作用域链只有一个对象-全局对象

依次执行代码

遇到var声明赋值语句给全局对象相应的属性赋值
遇到未声明赋值语句,在全局对象中增加相应的属性,并赋值

遇到函数调用,创建调用对象

搜索函数中的var声明和参数,创建调用对象相应的属性,初始化为undefined
创建函数执行环境,作用域链--第一对象:调用对象;第二对象:全局对象
依次执行代码
遇到var声明赋值语句给调用对象相应的属性赋值
遇到未声明赋值语句,在全局对象中增加相应的属性,并赋值
遇到函数调用,创建嵌套函数的调用对象
搜索嵌套函数中的var声明和参数,创建嵌套函数的调用对象相应的属性,初始化为undefined
创建嵌套函数执行环境,作用域链--第一对象:嵌套函数的调用对象;第二对象:调用对象;第三对象:全局对象

HTML5培训技术

本文由欣才IT学院整理发布,未经许可,禁止转载。
支持29不支持0