Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript—自调用匿名函数是否充分保护变量不受全局命名空间的影响?_Javascript_Node.js - Fatal编程技术网

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