代码之家  ›  专栏  ›  技术社区  ›  emilll

(this)在函数声明之后

  •  1
  • emilll  · 技术社区  · 10 年前

    有人能解释一下吗 (this) 指以下代码末尾:

    var a=(function(_this){
     return function() {
      //do something
      return smth;
     };
    })(this);
    

    这种编码有什么意义?


    接下来,当放置在.js文件中并由html标记调用时,以下代码会做什么?

    (function() {
     Emitter=(function(){
      function Emitter() {}
      ...
      return Emitter;
     })();
     A=(function(_super){...})(Emitter);
    }).call(this);
    

    如何从js文件外部实例化对象A?

    2 回复  |  直到 10 年前
        1
  •  2
  •   Kevin Smith    10 年前

    这是一个自执行函数,用于通过函数的闭包保存对“This”的引用。它用于在函数第一次执行时保持对“this”的引用。

    您还可以使用Function.pr原型.bind()来实现类似的结果,即保存对“this”的引用: MDN - Bind

        2
  •  1
  •   jfriend00    10 年前

    整个结构是保存当前值的一种方法 this 以便稍后的函数调用可以使用它。

    这一切都可以用 .bind() 像这样(如果你明白 .bind() 可能更容易理解):

    function myFunc(_this) {
        // do something
    }
    
    var a = myFunc.bind(null, this);
    

    下面是您所展示的代码中发生的各种步骤:

    当最初执行此代码时(您没有显示),将从周围上下文中获得一个值。它作为一个参数被传递到一个自执行函数中,该参数通常被称为IIFE(立即调用的函数表达式),而IIFE只是一个函数调用,在代码最初运行时立即内联发生。

    在该函数中,它的参数名为 _this .

    当该函数执行时,它返回另一个函数。该内部函数的主体也可以访问 _这个 .

    当返回该内部函数时,它被分配给变量 a .

    这一切的结果是 a() 以及该函数的内部,当它执行时,将能够访问 _这个 其中包含原始值 .

    因此,它本质上是一种创建函数的方法,当执行该函数时,可以访问 即使上下文在 a() 稍后调用。因此,它本质上节省了 以便稍后使用特定功能。

    更详细的信息需要更多的上下文来了解内部函数内部发生了什么 价值在原始环境中 a() 稍后使用。


    这是IIFE的一个特殊用途。它们还有许多其他用途。