1.变量提升
1.函数提升,先把函数提到最前面,然后是变量提升
var value = 1;
var test = function(){
console.log(value)
var value = 2;
}
function test(){
console.log(value+1)
}
test(); // undefined
首先是test()函数会被提升到最先,
然后执行value=1赋值,test = function(){}赋值
var test = function(){} 里面的value 提升,先执行 var value ;然后执行console.log(value),所以输出 undefined
最后转变为
function test(){
console.log(value+1)
}
var value = 1;
var test = function(){
var value; // undefined
console.log(value)
value = 2;
}
test();
2.闭包/作用域
function foo(y){
var num = 3;
return function (x){
console.log(x+y+(++num));
}
}
var bar = foo(5)
bar(20) //29
bar(21) //31
解析为:
在foo这函数的作用域下
var num = 3
var bar = function(x){
console.log(x+y+(++num))
}
bar(20) num=++num=4 x = 20 y=5 //29
bar(21) num=++num=5 x = 21 y=5 //31
闭包:可以让外部访问局部变量的函数
(function(w){
var a = 50;
w.test = a
})(window)
console.log(window.test);
闭包(function(w){var a = 50;w.test = a})里面的变量只能通过 window 来得到