今日看了下JS变量的一些文章,有些感触,把自己总结的一些写出来。
JS初始化的过程
1.JS解释器执行代码之前,创建全局变量
2.用预定义的值和函数来初始化全局对象中的属性,
3.搜索函数外的var声明,创建全局对象相应的属性初始化为undefined
(如果遇到定义式函数,进行预处理,如果是赋值式函数,将函数当变量使用)
4.创建全局的执行环境,作用域链只有一个对象--全局对象
5.依次执行代码
6.遇到var声明的,给变量赋值,
遇到未声明赋值语句,在全局对象中增加相应的属性并赋值
遇到函数调用,创建嵌套函数的调用对象
7.搜索嵌套函数中的var声明和参数,创建嵌套函数的调用对象相应的属性,初始化为undefined
8.遇到var声明的,给变量赋值,(此时为局部变量)
遇到未声明赋值语句,在全局对象中增加相应的属性并赋值(注意:此时为全局变量)
依次类推
(多演示几遍就好了,就不一一贴出来了)
注意:
1.变量
var scope="global"; var f2 = function(){ console.log(scope); scope="local"; console.log(scope); } var scope="aaa"; console.log(scope); f2(); console.log(scope); //结果为:aaa aaa local local
2.赋值式函数和定义式函数
//此为定义式函数 function aa(){ console.log(aaa); } //此为赋值式函数 var aa = function(){ console.log('a'); } //区别 //定义式函数 var aa = 100; f1(); function f1(){ console.log(aa); } //结果为100 //赋值式函数 var aa = 100; f1(); var f1 = function (){ console.log(aa); } //结果为f1 is not a function //说明定义式函数在初始化的时候就已经被知道了