假设我有一个警告消息的简单函数:
function callMessage(msg){
alert(msg);
}
现在,当我这样称呼它时,它不起作用。引发错误“嘿未定义”
function sayHi(){
var hey = "hi there"
setTimeout("callMessage(hey)", 1000);
}
sayHi();
但是,当我在匿名函数中调用它时,它确实起作用:
function sayHi(){
var hey = "hi there"
setTimeout(function(){callMessage(hey);}, 1000);
}
sayHi();
为什么“hey”变量仅在将其放入匿名函数中时可见?
最佳答案
在第一个示例中,在计时器到期并且保留了当前作用域之后,对代码进行了评估。那时hey
是未定义的。
第二个示例-使用setTimeout
的正确方法-使用调用setTimeout()
时创建的匿名函数。此匿名函数还接收当前作用域的副本。
关于javascript - 为什么此关闭有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9519240/