javascript - 为什么 Nodejs callback() 不能访问回调范围外的变量?

标签 javascript node.js events callback

总的来说,我对 NodeJS 和 JavaScript 还比较陌生。这是我的脚本:

var fs = require('fs') ;

var temp = "???";

var test = function (){
    fs.readdir("./", function(err,result){
    temp = result;            // i change the temp's value
    console.log("inter result ....."+temp);        //  temp's value changed
    setTimeout(pr,1000,"inter setTimeout: "+temp);  //  temp's value changed 
    });
}

var pr = function (str){
    console.log("Print str: "+ str);
} ;


test();

setTimeout(pr,1000,"Out setTimeout print: "+temp);  //  Why here temp's value not change???

如何在回调之外更改为 var temp 的值?

最佳答案

setTimeout(pr,1000,"Out setTimeout print: "+temp);

相同
var str = "Out setTimeout print: " + temp;
setTimeout(pr, 1000, str);

此时 temp 仍然是 "???"。你必须使用

setTimeout(function() {
  pr("Out setTimeout print: "+temp);
}, 1000);

关于javascript - 为什么 Nodejs callback() 不能访问回调范围外的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9088471/

相关文章:

javascript - 在 Grunt.js 中将 Processhtml 与 Jade 结合使用

jquery - 使用 $.trigger() 在 jQuery 中触发自定义事件时更改 'this'

c# - 有没有办法从 COM Interop 调用 C# 委托(delegate)?

JavaScript - 使用 CSS 类和 setInterval 方法更改背景

javascript - Backbone.js 和正确重构

Google 表格中的 JavaScript 函数

node.js - 无法连接到数据库 - EADDRNOTAVAIL

node.js - react : error TypeError: Network request failed

javascript - 基于innherHTML点击事件触发不同的功能

javascript 或 css : How to Hide any Number followed by dot Prefix "1.text", "2.text".. ."30.text"来自标签内的文本