var a = 1;//用var定义的变量,以赋值 var b;//用var定义的变量,未赋值 c = 3;//未定义,直接赋值 functiond(){//用声明的方式声明的函数 console.log('hello'); } var e = function(){//函数表达式 console.log('world'); }
在预处理时上面代码创建词法作用域可以这样表示:
1 2 3 4 5
LE { // 此时的LE相当于window a:undefined b:undefined d:对函数的一个引用 }
二、命名冲突的处理
1 2 3 4
console.log(f); var f = 1; functionf(){console.log('foodoir');} // 输出 function f(){console.log('foodoir');}
1 2 3 4
console.log(f); var f = 1; functionf(){console.log('foodoir');} // 输出 function f(){console.log('foodoir');}
1 2 3 4
console.log(f); var f = 1; var f = 2; // 输出 undefined
1 2 3 4
console.log(f); functionf(){console.log('foodoir');} functionf(){console.log('hello world');} // 输出 function f(){console.log('hello world');}