再谈js的作用域
面试中遇到的一个题目:
1 var word = "hello world"; 2 (function(){ 3 alert(word); 4 var word = "hello test"; 5 })(); 6 ********************************** 7 var word ="hello world"; 8 (function(){ 9 alert(world); 10 function world(){ 11 console.log("hello test"); 12 } 13 })()
这两段代码会发生什么?console一下,你就知道。
- 局部变量的优先级大于全局变量。
- js编译机制
js分为编译期和运行期,编译的过程中为var声明的变量和*function*分配内存,运行期顺序执行。
- var 声明的变量,只有变量声明提前。变量的初始化还在原来的位置。
- 使用函数声明语句的话,函数名称和函数体均提前。(函数声明语句中,函数名是一个变量名,指向函数体)