下面代码输出什么
var a = 10
(function () {
console.log(a)
a = 5
console.log(window.a)
var a = 20
console.log(a)
})()
-
- 因为函数内部var a变量声明提升,但是赋值不会提升,所以先输出undefined,再输出10,20。注意因为内部声明了新的a,所以函数内部操作的a都是局部变量a,而window.a还是10
var a = 10
(function () {
console.log(a)
a = 5
console.log(window.a)
a = 20
console.log(a)
})()
console.log(a)
-
- 因为函数内部没有a,因此向外作用域找到的是全局变量a,所以这些赋值操作都是对全局变量a进行的,最终输出为10=>5=>20=>20注意。
var a = 10;
(function (a) {
console.log(a)
a = 5
console.log(window.a)
a = 20;
console.log(a)
})(a)
console.log(a)
-
- 将a赋值给函数的参数,内部获得的参数a为局部变量,内部的操作都是局部变量的操作,全局变量a不会改变,最终输出为10=>10=>20=>10