Javascript在函数问题之外使用变量

时间:2015-11-11 20:38:44

标签: javascript node.js

我目前正在学习node.js并且已经多次遇到过相同的问题,看起来非常简单,但我仍然无法理解如何解决它。

代码:

var SRC_PORT = 6025;
var dgram = require('dgram');
var clientUDP = dgram.createSocket("udp4");
var test

clientUDP.bind(SRC_PORT, function () {
    multicastNew()
});

function multicastNew() {
    var test = 777
    console.log(test);
}

问题 不能在函数multicastNew()

之外使用变量测试内容

在函数multicastNew()中,我有一个变量var test。在multicastNew()的那个函数中,我给了test = 777。当我想在同一个函数console.log(test)multicastNew()一切正常时,它会输出777。问题是,当我想要console.log(test)外部函数multicastNew()时,它会输出undefined

您能解释一下如何解决这个问题及其原因。 谢谢!

2 个答案:

答案 0 :(得分:3)

您应该在test = 777;中将mulitcastNew()更改为var SRC_PORT = 6025; var dgram = require('dgram'); var clientUDP = dgram.createSocket("udp4"); var test; clientUDP.bind(SRC_PORT, function () { multicastNew(); }); function multicastNew() { test = 777; console.log(test); } 。你的代码应该是这样的:

variable

关于范围的说明。在Javascript中,函数创建范围。在函数内部用var定义的任何function都是局部变量,在函数外部是不可见的。它仅包装wrapping function本地,如果没有//this is global scope var a = "Chris"; var b = "Inspired"; function nameChange(){ var a = "inspired"; // local to the function nameChange() b = "Chris"; //without var we are changing the global variable console.log(a); //will output inspired } nameChange(); // inspired console.log(a); // Chris console.log(b); // Chris ,它将成为全局变量。

请考虑以下事项:

public void OnModuleShown()
{
     if (ModuleShown != null)
         ModuleShown(this, new ModuleShownEventArgs());
}

public void ShowModule (string uri, string headerTitle, string message, string transition = "DefaultTransition")
{
    // Security and destination validation

    GetInfoFromURI(uri, out contentKey, out dataKey, out securityToken);

    OnModuleShown();

    ShowLoadingSpinner();

    _loadModule(contentKey, dataKey, securityToken, headerTitle, message, transition);
}

答案 1 :(得分:1)

关于功能范围。当您声明var test = 777时,您正在函数multicastNew()的范围内创建新变量。此变量涵盖了您的主要内容'来自全局范围的变量...所以你的函数从现在开始工作在你的局部变量上,而不是从全局范围开始。
JavaScript总是在调用范围内查找变量。在您的示例中,当您尝试在test之外调用multicastNew()时,当前范围为GLOBAL,因此它会从您的代码开头找到您的var test。它始终从内到外(closures)起作用。

您可以阅读:
Scopes