作用域
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