(这)在函数声明之后

时间:2015-02-11 18:51:20

标签: javascript function variables scope declaration

有人可以解释一下(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 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

这也可以通过这样的.bind()来完成(如果您了解.bind()可能更容易遵循的内容):

function myFunc(_this) {
    // do something
}

var a = myFunc.bind(null, this);

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

当最初执行此代码时,

this将具有来自周围上下文的值(您不会显示)。它被作为一个通常称为IIFE(立即调用的函数表达式)的参数传递给自执行函数,它只是一个函数调用,它在代码最初运行时立即内联。

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

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

当返回该内部函数时,它被赋值给变量a

所有这一切的结果是,可以调用a()和该函数的内部,当它执行时将能够访问包含原始_this值的this

因此,它本质上是一种创建函数的方法,该函数在执行时将能够访问this的原始值,即使稍后调用a()时上下文也会发生变化。因此,它基本上保存了this的值,以便稍后使用特定函数。

更多细节需要更多关于内部函数内部内容的内容,this值在原始上下文中的含义以及稍后如何使用a()


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