我在进行 Node.js 异步编码时遇到一个问题。 示例代码如下:
function foo(arg) {
var a = arg;
console.log(a + ' start');
setTimeout(function () {console.log(a);}, 500);
};
foo(1);
foo(2);
它输出:
1 start
2 start
1
2
我很困惑。我以为应该输出↓,因为局部变量被foo(2)改变了
1 start
2 start
2
2
你们能告诉我为什么/如何node.js保留本地变量以供内部回调函数访问吗? 非常感谢!
最佳答案
因为它是局部变量,而不是全局变量。这就是局部变量的意义。
var a
创建一个在函数调用的生命周期内存在的变量。在其中声明一个函数也可以延长生命周期以覆盖该函数。调用匿名函数时,它会继续使用创建它的作用域中存在的 a
。
由于您调用外部函数两次,因此有两个 a
。每次通话一个。您有两个匿名函数,每个调用一个。每个匿名函数都是在与其中一个 a
相同的作用域中创建的。
关于javascript - node.js 在函数中保留局部变量,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10073029/