涉及setTimeout时,词汇作用域在这里如何工作?
请考虑以下代码:
function foo (){
var count = 40;
setTimeout(function bar(){
console.log(count)
})
count = 50;
}
foo();
此将正确打印50
,这很好。但是,如果我只是将count
作为参数传递给函数bar
,它将打印undefined
。为什么它不从其词法范围中取值?
function foo (){
var count = 40;
setTimeout(function bar(count){
console.log(count)
})
count = 50;
}
foo(); //Prints undefined
回答如下:在第一种情况下,您的函数具有要计数的闭包,并且由于setTimeout回调在赋值之后运行,因此您会看到值50。
在第二种情况下,您的函数接受一个称为count的参数。该参数比闭包更强大,并且由于您没有将其传递给函数,因此它是未定义的。
涉及setTimeout时,词汇作用域在这里如何工作?
请考虑以下代码:
function foo (){
var count = 40;
setTimeout(function bar(){
console.log(count)
})
count = 50;
}
foo();
此将正确打印50
,这很好。但是,如果我只是将count
作为参数传递给函数bar
,它将打印undefined
。为什么它不从其词法范围中取值?
function foo (){
var count = 40;
setTimeout(function bar(count){
console.log(count)
})
count = 50;
}
foo(); //Prints undefined
回答如下:在第一种情况下,您的函数具有要计数的闭包,并且由于setTimeout回调在赋值之后运行,因此您会看到值50。
在第二种情况下,您的函数接受一个称为count的参数。该参数比闭包更强大,并且由于您没有将其传递给函数,因此它是未定义的。
发布评论