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