很多地方都可以看到js代码用
(function($){
//代码
var demo = function(){
};
var demo2 = function(){
};
})(jQuery)
这样包起来,这是js闭包吧。把js代码写到这个里面有什么好处呢?
<script type="text/javascript">
(function($){
var hehe = funcion(){
alert('hehe');
};
})(jQuery);
</script>
这是一个立即执行匿名函数,同时也是一个闭包。
闭包的作用主要有两个:减少全局变量,保护变量
举两个例子请题主揣摩:
这不是闭包,这是自调用匿名函数
因为js在es6以前只支持函数作用域
所以通常使用这样的方式减少全局变量,防止命名冲突
减少全局变量污染
同时便于GC即时回收
说不是闭包的自己去看犀牛书,函数皆闭包。 不过你们理解的闭包跟理论定义的闭包不是完全等同的概念而已。这里的主要作用确实是防止变量全局污染。
首先,你所说的问题不是闭包,JavaScript是一门基于函数作用域的语言,而不像其他语言一样存在块级作用域,这样意味着函数外部不能访问函数内部的产量,更好地实现数据的封装!
立即自执行函数,避免变量污染全局作用域。
假如你有多个版本的jquery。可以分别传如不通的jquery,多版本很不错。
例如:
(function($){cosnole.log($)})(jquery1) ;(function($){cosnole.log($)})(jquery2);
这样都可以使用$符合了
刚用chrome debug了一下,确实不是闭包 - - !
这不是闭包吧。我理解闭包的意思是可以在超出变量的作用域范围来使用读写变量。
这是立即调用函数IIFE,可以避免污染全局变量。
不是闭包啊兄弟