gpt4 book ai didi

带有回调 VS 的 JavaScript setTime()。具有匿名功能

转载 作者:行者123 更新时间:2023-11-29 10:23:10 25 4
gpt4 key购买 nike

我发现下面两个setTime函数的例子,虽然代码看起来一样,但是两种情况下的结果是不同的。

示例 1:结果“Hello Stack Overflow”

var a = "world";  
setTimeout(function(){alert("Hello " + a)}, 2000);
a = "Stack Overflow";

示例 2:结果“Hello world”

function callback(a){  
return function(){
alert("Hello " + a);
}
}
var a = "world";
setTimeout(callback(a), 2000);
a = "Stack Overflow";

为什么在第一个示例中 a 的值发生了变化,而在 example2 中却没有?

最佳答案

在第一个例子中,函数直接读取a的值。在第二个示例中,函数读取传递给它的工厂函数的参数值。即使我们稍后重新分配变量的值,也不会影响参数的值。如果参数使用不同的名称可能会更清楚:

function callback(x){  
return function(){
alert("Hello " + x);
}
}
var a = "world";
setTimeout(callback(a), 2000);
a = "Stack Overflow";

如果你使用了一个对象,你就会有不同的故事。稍微修改你的例子,它们都有相同的结果:

示例 1

var o = {};
o.a = "world";
setTimeout(function(){alert("Hello " + o.a)}, 2000);
o.a = "Stack Overflow";

示例 2

function callback(obj){  
return function(){
alert("Hello " + obj.a);
}
}
var o = {};
o.a = "world";
setTimeout(callback(o), 2000);
o.a = "Stack Overflow";

关于带有回调 VS 的 JavaScript setTime()。具有匿名功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7296719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com