Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript (此)在函数声明之后_Javascript_Function_Variables_Scope_Declaration - Fatal编程技术网

Javascript (此)在函数声明之后

Javascript (此)在函数声明之后,javascript,function,variables,scope,declaration,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

有人能解释一下以下代码末尾的
(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文件外部实例化对象

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

这一切也可以用这样的方法来完成(如果您了解
.bind()
的作用,那么可能更容易理解):


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

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

在该函数中,它的参数名为
\u this

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

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

所有这一切的结果是,人们可以调用
a()
,该函数的内部结构在执行时将能够访问
\u this
,其中包含原始
this
的值

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

更详细的信息需要更多的上下文来说明内部函数中发生了什么,这个
值在原始上下文中是什么,以及以后如何使用
a()



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

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

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

搜索“立即调用的函数表达式”。有很多关于它的问题和文章。这是许多事情的常见模式,但您可能会在插件和库中看到它,它是一个自调用函数。我想,当你需要携带一个对象的引用时,你会像那样关闭自调用函数。这些答案中有一个回答了你的问题吗?如果是,请单击答案左侧的绿色复选标记,选择一个作为“最佳答案”。
function myFunc(_this) {
    // do something
}

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