立即执行函数里用var申明

46 阅读1分钟

立即执行函数里面用var声明

var num = 10;
!function(){
console.log(num);//输出undefined
num = 5;
console.log(num);//输出5
console.log(window.num);//输出10
var num = 20,
console.log(window.num);//输出10
console.log(num);//输出20
}();
console.log(num);//输出10
console.log(window.num);//输出10

原理:立即执行函数是一个局部作用域,var会声明提前,造成里面同一个变量为局部变量,所以在里面一切用window.打印的都为全局对象上面的对应值。

立即执行函数里面不用var声明

var a=10;
!function(){
console.log(a);//输出10
a=5;
console.log(window.a);//输出5
console.log(a);//输出5
};
console.log(a);//输出5
console.log(window.a);//输出5

原理:在函数内部用var声明的变量为局部变量,不用var严格来说不是为全部变量,而是看做当前作用域直至顶层对象添加属性