我目前正在学习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
。
您能解释一下如何解决这个问题及其原因。 谢谢!
答案 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