javascript - node.js 在函数中保留局部变量,为什么?

标签 javascript node.js

我在进行 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/

相关文章:

javascript - 自动完成搜索从服务器检索数据花费的时间太长

javascript - 如果您使用 2 级 URL,Express 会将 URL 的第一部分添加到注入(inject)中?

html - 为客户构建静态网站的最佳方式?

javascript - 为什么 readdirSync() 说没有这样的文件或目录?

javascript - Backbone View DOM 元素已删除

javascript - 当服务器需要访问套接字之类的东西时,browserify 怎么可能让服务器代码在浏览器中运行?

node.js - Nginx代理传递子域、 Node vhost

javascript - 为什么 Mongoose 排序比原生 javascript 排序慢?

javascript - 根据现有数据更新 Alasql 数据库详细信息

Javascript 转义字符 href html