【问题标题】:Wrapping a file with (function() { … }).call(this) versus a call with simply () [duplicate]使用 (function() { ... }).call(this) 包装文件与使用 () [重复]
【发布时间】:2012-07-20 05:43:39
【问题描述】:

backbone.js 源代码使用这样的函数包装器:

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

http://backbonejs.org/docs/backbone.html#section-185所见。

更多时候,我看到使用以下代替:

(function(){
    ...
})();

这两者的行为何时不同?我的印象是它们是等效的,但我认为肯定存在差异,因为 Backbone 使用 .call(this) 而不是较短的替代方案。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    在第一个示例中,函数内部的this 将是调用范围内的this

    在第二个示例中,this 将是 window

    (正如 Šime Vidas 所说,在严格模式下它是 undefined,而不是 window。)

    【讨论】:

    • 糟糕,你说得对。谢谢!
    • 人们可以通过评估 (function() { return (function() { return this; })(); }).call(2) 并注意到它评估为 window 而不是 2 来轻松验证这一点。
    • 值得一提的是,在严格模式下它是undefined,而不是全局对象。
    • @ŠimeVidas 老实说,我实际上并不知道(虽然有道理)。将编辑答案以说明这一点。谢谢。
    【解决方案2】:

    第一个this在函数中与调用时的作用域相同,第二个 this 将引用窗口对象。

    【讨论】:

      猜你喜欢
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2013-12-28
      • 1970-01-01
      • 2015-08-17
      相关资源
      最近更新 更多