【问题标题】:Advantage of (function() {/*...*/}).call(this); [duplicate](function() {/*...*/}).call(this); 的优点[复制]
【发布时间】:2013-10-17 12:07:45
【问题描述】:

在查看uuid.js 的代码时,我注意到整个 api 定义的这种模式。

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

这种模式在javascript中有什么好处?

【问题讨论】:

  • 自执行的javascript函数。对于.call
  • @RoyiNamir 不,普通的 IIFE 将使用全局上下文。
  • @RoyiNamir 除非你不能,因为this 将是全局对象。 .call(this) 覆盖了这个。
  • @Alnitak 是的,你是对的。 (我忘记了 this 的 iife 上下文)。 tnx 提醒我 :-)

标签: javascript


【解决方案1】:

它只是一个立即调用的函数表达式,它具有定义的上下文 (this)。普通的 IIFE 会将全局对象作为其上下文。

读取您链接到的源文件,在这种情况下(不是双关语),他们使用this 来获取对全局对象的显式 引用,而不假设它被命名为@ 987654323@(用于浏览器)或global(用于 node.js 等)。

(IIFE 是一种创建新作用域的常用构造,可以在其中声明变量而不会污染全局名称空间,并且可以立即执行块中的代码)。

【讨论】:

    【解决方案2】:

    这样做的主要优点是您可以在函数内声明任意数量的变量,而且它们不会污染全局范围。

    另请参阅:module pattern.

    【讨论】:

    • 我相信OP不是在询问IIFE,而是FE.call(this)的具体用途,而不仅仅是FE()
    • 它允许你告诉函数谁将在函数内部绑定为'this'。
    猜你喜欢
    • 2013-09-28
    • 1970-01-01
    • 2012-07-20
    • 2021-10-28
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    相关资源
    最近更新 更多