(this)在函数声明之后

(this) after function declaration

本文关键字:声明 之后 函数 this      更新时间:2023-09-26

有人能解释一下(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?

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

您也可以使用Function.protype.bind()来实现保存对"this"的引用的类似结果:MDN-绑定

整个结构是保存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的一个特殊用途。它们还有许多其他用途。