1、var变量提升的一道题目
var func = function(){
console.log(a);//执行函数 a:undefined
var a = 100;
}
console.log("outside_a:" a);//函数中的a属于局部作用域, 报错:引用错误
func();
2、自执行函数1:
var a = 20;
(function a() {
var a = 100; var b = 100;
})();
console.log("a", a)//此处a 20
console.log("b", b)//此处b 报错reference error
自执行函数2:
(function a() {
console.log(a);//undefined
var a = b = 100;
console.log("a_after:", a)
console.log(b);//100
})();
自执行函数在外部:
var a = 20;
(function a() {
console.log("自执行函数的this:", this);//全局的window
console.log(a)
var a = b = 100;
console.log("inside_b:", b)
})();
//思考此处outside_a打印为何不是100 ?(连续赋值,变量b相当于window.b=100)
console.log("outside_a:", a);// outside_a: 20
console.log("outside_b:", b);// outside_b: 100
3、关于连续赋值:
var a = b = 100;
js中的赋值是从右向左,上述连续赋值可以拆分为:
b = 100;
var a = b;
所以:如果在函数中连续赋值,由于函数存在作用域的,所以在函数外部访问不到函数内部的var变量。
所以:
(function f() {
var a = b =100
})();
console.log("a:", a)//a此处会报错:referenceError
console.log("b:", b)//b为全局的window.b = 100