Javascript作用域意外结果
Javascript Scope Unexpected Results
我已经和这个问题斗争了几个小时,我在node.js中运行的js代码如下。
setInterval(function () {
var exampleVar;
exec('cat /path/to/unimportant/file', function (error, stdout, stderr) { // This function returns errors, stdout and stderr
console.log(stdout); // correct value
exampleVar = stdout;
console.log(exampleVar); // correct value
}
console.log(exampleVar); // undefined
}, unimportantTime);
我认为,因为变量已经由exec创建的函数的父作用域声明,所以我可以为它赋值。有人能解释我做错了什么,以及访问作用域外变量的正确方法吗?
您的问题不是范围的问题,而是同步性的问题。
在Node.js中,默认情况下,大多数函数都是异步的,这意味着无论这些函数是否实际完成运行,程序的执行都会继续。
因此,在传递给exec
的函数有时间执行之前,会执行最后一个console.log(exampleVar)
(因为IO操作通常比执行缓存的JS代码慢得多)。
有关更深入的解释,请参阅本入门教程。
相关文章:
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 逻辑和/或运算符-意外的最终结果
- Javascript:函数返回意外结果
- 意外结果,在 ASP.Net 中解析 JSON 对象的数组
- 按位或意外结果
- 来自 JavaScript 循环的意外结果
- 从 JavaScript 中的图像中读取像素数据会返回半透明像素的意外结果
- 在 JS 中短路空数组会产生意外结果:“[] ||真 == []'
- NodeJS中的Parse Json文件在Node中显示意外结果
- 做了一个javascript小实验,需要你的帮助才能理解意外的结果
- 基于给出意外结果的提示输入的逻辑
- JavaScript Regexp.test返回意外结果
- 推入数组会产生意外的结果
- 键控产生意外结果.HTML5游戏
- Javascript do/while循环显示意外结果
- 来自 CSS 和 jQuery 的意外结果
- MongoDB mapReduce方法意外结果
- 具有意外结果的 Javascript 函数参数
- 如何在集合中的项上触发 jQuery 事件(意外的 jQuery 结果来自 $._data() 与集合的第一个元素)
- 在 JavaScript 中解析日期字符串的意外结果