首页 > 闭包:js这样写有什么好处?

闭包:js这样写有什么好处?

很多地方都可以看到js代码用

(function($){
    //代码
    var demo = function(){
    
    };
    
    var demo2 = function(){
    
    };    
})(jQuery)

这样包起来,这是js闭包吧。把js代码写到这个里面有什么好处呢?

<script type="text/javascript">
    (function($){
        var hehe = funcion(){
            alert('hehe');
        };
    })(jQuery);
</script>

刚用chrome debug了一下,确实不是闭包 - - !


减少全局变量污染
同时便于GC即时回收


这不是闭包吧。我理解闭包的意思是可以在超出变量的作用域范围来使用读写变量。
这是立即调用函数IIFE,可以避免污染全局变量。


这不是闭包,这是自调用匿名函数
因为js在es6以前只支持函数作用域
所以通常使用这样的方式减少全局变量,防止命名冲突


假如你有多个版本的jquery。可以分别传如不通的jquery,多版本很不错。
例如:(function($){cosnole.log($)})(jquery1) ;(function($){cosnole.log($)})(jquery2);
这样都可以使用$符合了


这是一个立即执行匿名函数,同时也是一个闭包。

闭包的作用主要有两个:减少全局变量,保护变量

举两个例子请题主揣摩:

// 第一例:
var a = function(){
    alert('global');
};
(function(){
    var a = function(){
        alert('closure');
    }
    a();
})();
a();


// 第二例:
var setter = function(){
    var privateVar;
    return {
        set: function(v){
            privateVar = v;
        },
        get: function(){
            return privateVar;
        }
    };
}();

setter.set('hello world');
setter.get();

首先,你所说的问题不是闭包,JavaScript是一门基于函数作用域的语言,而不像其他语言一样存在块级作用域,这样意味着函数外部不能访问函数内部的产量,更好地实现数据的封装!


说不是闭包的自己去看犀牛书,函数皆闭包。 不过你们理解的闭包跟理论定义的闭包不是完全等同的概念而已。这里的主要作用确实是防止变量全局污染。


立即自执行函数,避免变量污染全局作用域。


不是闭包啊兄弟

【热门文章】
【热门文章】