javascript - 这种基于 IIFE 的 JavaScript 模式有什么好处?

标签 javascript

我掌握了 Javascript IIFE 的本质,但是在阅读 this page 时,我对它的用法有点困惑。

听起来以下 JavaScript 模式很常见:

(function(something) {

    something.foo = 123;

})(something || something = {}) 

使用示例:

(function(something) {

    something.foo = 123;

})(something || something = {})

console.log(something); // {foo:123}

(function(something) {

    something.bar = 456;

})(something || something = {})

console.log(something); // {foo:123, bar:456}

由于 something 是在全局范围内定义的,因此这种模式相对于以下简单代码有什么好处:

var something;
something.foo = 123;
something.bar = 456; 

哪种用例才适合使用它?

最佳答案

你得到了一个对something的闭包,这确保了即使其他一些代码覆盖了它在全局范围内,你仍然拥有对该something的正确引用,它更好地说明了使用 jQuery 和 jQuery.noConflict();:

<script src="/path/to/jquery.js"></script>
<script>
  (function($) {
      // Here $ is jQuery
     // Something asynchrone is happening:
     setTimeout(function() {
       // But $ is still jQuery
     }, 1000); 
  })($);
</script>
<script>
  // Someone calls jQuery.noConflict();
  jQuery.noConflict();
  // And now $ is not jQuery
</script>

关于javascript - 这种基于 IIFE 的 JavaScript 模式有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37749077/

相关文章:

javascript - 如何修改堆积面积图端点的插值?

javascript - Element.value 和 Element.getAttribute ("value"的区别)

javascript - 从网络摄像头到服务器的纯 js 流

javascript - JS 使用不同的填充

javascript - 音频开始延迟时如何播放视频媒体源扩展?或者如何用ffmpeg修复它?

javascript - 这是有效的 JavaScript 吗?

javascript - 触发jquery后如何获取返回值?

Javascript BlueBird promise : architecture for concurrent API requests

javascript - Angular 2 : AuthGard renders the page before it checks whether SecurityContext is applied or not

javascript - Foundation 6 向下钻取动画速度