【发布时间】:2011-09-14 14:19:28
【问题描述】:
如果我在传递的函数中定义了一些东西,例如
var name = "Whatever";
现在可以从应用程序的其他部分访问,还是受到限制?在 node.js javascript 中定义范围背后的逻辑是什么?
【问题讨论】:
标签: javascript node.js
如果我在传递的函数中定义了一些东西,例如
var name = "Whatever";
现在可以从应用程序的其他部分访问,还是受到限制?在 node.js javascript 中定义范围背后的逻辑是什么?
【问题讨论】:
标签: javascript node.js
name 变量仅在创建它的函数中可用,或在嵌套在该函数内部的函数中。
无论函数在哪里传递,这都是正确的。它的原始变量环境随身携带,任何外部该环境的代码都无法访问name。
【讨论】:
如果您使用var,则方法中定义的任何变量仅在该方法中可用。如果你这样做了
myVar = 1;
myVar 将是全局的。
Node 就像其他的 javascript。 Node 确实定义了一个 global 变量,所以你可以这样做
global.SOME_CONSTANT = 'A Constant'
然后像这样使用
SOME_CONSTANT
您的代码/模块中的任何位置。
因为节点是异步的,你最终会定义很多回调。即你做了很多
someModule.someMethod(opts, function(data){
// callback code in here
});
你传入的函数在完成后被someMethod 调用。假设您在函数中调用了someModule.someMethod。如果您在该外部函数中定义了一个变量,那么您的代码看起来像
var x = [];
someModule.someMethod(opts, function(data){
// x is available in this callback because of closures, so you can do
x.push(data);
});
由于闭包,外部作用域中定义的变量在回调中可用。我建议您花一些时间阅读有关 javascript 中的闭包。
【讨论】:
它只在模块中可用,并且只在它定义的函数中可用。 没有办法定义范围。每个模块都有自己的全局范围。
你应该阅读闭包;)
【讨论】: