怎么写好立即执行功能?

时间:2016-08-30 10:07:54

标签: javascript

1.在我的代码中

(function(){})();

2.often read

(function(){}.call(this));

运作良好。哪一个更好?为什么呢?

1 个答案:

答案 0 :(得分:1)

通常情况下,IIFE始终与全球背景相关联。在你的第二个片段中,它绑定到第一个调用参数提供的上下文。比如没有电话



var a = 20,
  obj = {a:10};

(function(){console.log(this.a)})()




但您可以通过调用

更改上下文



var a = 20,
  obj = {a:10};


(function(){console.log(this.a)}.call(obj))




您可能认为.call(this)总是引用全局对象,但可能并非如此,具体取决于调用IIFE的时间。让我们扩展一个例子,只有在调用o.b()时才会调用IIFE。

Wiithout .call(this)



var a = 20,
  obj = {a:10,
         b: function(){
              return (function(){console.log(this.a)})()
            }
        };

obj.b();




.call(this)



var a = 20,
  obj = {a:10,
         b: function(){
              return (function(){console.log(this.a)}.call(this))
            }
        };

obj.b();