Skip to main content

作用域

var a = 2
var results = []
var total = 0

function foo(a) {
for (var i = 0; i < 3; i++) {
results[i] = function() {
total += i * a
console.log(i)
}
}
}

foo(1)
results[0]()
results[1]()
results[2]()

当result函数执行的时候,当上作用域内获取不到a变量,所以往上一层照,可以拿到foo函数下的a变量,值为1

由于i变量使用的是var关键字定义,那么它会是在foo函数下的作用域去定义i,当result函数执行时,此时的for循环已经执行完毕,所以i的值为3,所以结果为3, 6, 9