search

Home  >  Q&A  >  body text

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

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

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

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

<script type="text/javascript">
    (function($){
        var hehe = funcion(){
            alert('hehe');
        };
    })(jQuery);
</script>
PHP中文网PHP中文网2820 days ago525

reply all(10)I'll reply

  • 怪我咯

    怪我咯2017-04-10 16:04:15

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

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

    举两个例子请题主揣摩:

    // 第一例:
    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();

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 16:04:15

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

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 16:04:15

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

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 16:04:15

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

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 16:04:15

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

    reply
    0
  • 迷茫

    迷茫2017-04-10 16:04:15

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

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 16:04:15

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

    reply
    0
  • PHPz

    PHPz2017-04-10 16:04:15

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

    reply
    0
  • 阿神

    阿神2017-04-10 16:04:15

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

    reply
    0
  • 迷茫

    迷茫2017-04-10 16:04:15

    不是闭包啊兄弟

    reply
    0
  • Cancelreply