无法访问函数中的变量

时间:2016-02-12 11:18:35

标签: javascript node.js scope

我是nodejs的新手。我已阅读了很多文章,无法弄清楚以下代码有什么问题。它的给定错误checkForActivity未定义。任何帮助将不胜感激。

var net = require('net');
net.createServer(function(sock){
    var checkForActivity = false;
    sock.on('data',function(data){
       changeCheckForActivity();
    });
});

function changeCheckForActivity(){
    checkForActivity = true;
}

2 个答案:

答案 0 :(得分:4)

checkForActivity仅在createServer()的范围内定义。在changeCheckForActivity()中,尚未定义createServer()是否异步且无论如何都不可见。

var net = require('net');
var checkForActivity = false;
net.createServer(function(sock){
    sock.on('data',function(data){
       changeCheckForActivity();
    });
});

function changeCheckForActivity(){
    checkForActivity = true;
}

可能更好的解决方案是:

var net = require('net');
net.createServer(function(sock){
    changeCheckForActivity(false);
    sock.on('data',function(data){
       changeCheckForActivity(true);
    });
});

function changeCheckForActivity(isAct){
    // do something in reaction to activity
    // isAct is now a local replacement for 
    // checkForActivity 
}

答案 1 :(得分:1)

checkForActivity在函数中定义,因此它位于函数scope中。函数范围changeCheckForActivity() checkForActivity尚未定义。如果在函数外定义checkForActivity,则两个函数都可以访问它:

var net = require('net');    
var checkForActivity = false;
net.createServer(function(sock){
    sock.on('data',function(data){
        changeCheckForActivity();
    });
});

function changeCheckForActivity(){
    checkForActivity = true;
}