声明提前(hoist): 在正式执行程序前,都会将所有var声明的变量和function声明的函数提前到*当前作用域*的顶部集中创建。
但是,赋值留在原地。
console.log(a);//undefined var a=10; console.log(a);//10
同理,下面也是一个例子:
因为函数的声明提前,同时第二个fun()覆盖了第一个fun(),所以第一个fun()会弹出2,第二个同理也是弹出2,第三个console.log则会输出var定义的100,最后一个fun()
1 fun();//2 2 function fun(){ 3 alert(1); 4 } 5 fun();//2 6 function fun(){ 7 alert(2); 8 } 9 var fun=100; 10 console.log(fun);//100 11 fun();//Uncaught TypeError: fun is not a function
再来一个例子:
因为函数内声明的变量a提前到函数作用域的顶端,但是值留在了原地,所以第一次console.log输出的是undefined,第二次输出100,同时函数执行完后被垃圾回收,最后一次console.log输出全部变量的值10。
1 var a=10; 2 function fun(){ 3 console.log(a);//undefined 4 var a=100; 5 console.log(a); 6 } 7 fun();//100 8 console.log(a);//10
时间: 2024-12-29 12:03:21