看一段代码:
function foo(){
var a =20
function bar(){
a = 30
console.log(a)
}
bar()
}
foo() //30
function foo(){
var a =20
function bar(){
var a = 30
console.log(a)
}
bar()
}
foo() //30
为什么不加var时候,还是输出30,不是不加var时候变量是全局变量吗?
回答:a=30事实上是对属性进行赋值操作。它会在当前作用域链中解析a,如果在任何当前作用域链中找到了a,那么就会对a进行赋值。如果都没找到,才是全局变量,这个例子中,很明显它能够在作用域链中找到a,所以输出30。