JavaScript—自调用匿名函数是否充分保护变量不受全局命名空间的影响?
使用闭包编写此代码会更好吗?是否有更好的编写方法,或者函数是否保护变量JavaScript—自调用匿名函数是否充分保护变量不受全局命名空间的影响?,javascript,node.js,Javascript,Node.js,使用闭包编写此代码会更好吗?是否有更好的编写方法,或者函数是否保护变量 (function(){ var http = require('http'), port = process.argv[2], string = "", length = 0; http.get(port, function(res){ res.on('data', function(data){ length
(function(){
var http = require('http'),
port = process.argv[2],
string = "",
length = 0;
http.get(port, function(res){
res.on('data', function(data){
length += data.length;
string += data;
});
res.on('end', function(){
console.log(length);
console.log(string)
});
});
})();
这会使变量自身处于内部,任何外部代码都无法触及:
(function() {
var so = '//stackoverflow.com';
alert(so); will alert '//stackoverflow.com'
})();
alert(so); // Will alert Undefined **See note at bottom
我用谷歌快速搜索找到了
注意:如下面的注释所述,这不会提醒未定义,但实际上会引发一个引用错误,因为
所以在IIFE之外的范围内不存在。更多 如果您关心的是全局范围,那么这不会泄漏任何内容?这会在函数中保留变量,并防止名称冲突或变量劫持。注意:与浏览器运行的JavaScript不同,模块(文件)已经包含在Node.js的闭包中。这就是它定义模块的方式和原因。在每个模块中导出
,以便向其他模块显示值。FWIW调用这些模块。似乎是个更好的名字,因为它不是自我调用的。不过,我不确定您提出的替代方案是什么,因为内部函数正在访问闭包。在任何情况下,用var
声明的变量的作用域仅限于函数。@Triode:如何“使用闭包编写”?你已经是了!注意:第二个警报()
将引发参考错误
,因为因此
不在该范围内。如果还有一个var so,它将是未定义的代码>(声明但单位化)在生活之外。我的错误,我会很快编辑。谢谢你@JonathanLonowski