(this)在函数声明之后
(this) after function 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?
这是一个自执行函数,用于通过函数的闭包保存对"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的一个特殊用途。它们还有许多其他用途。
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 在chrome.tabs.onCreated之后加载HTML页面
- 在Jquery detachment()和appendTo()之后定位元素
- AngularJS:ng之后,重复$scope值未按预期更新
- 直接在函数声明上使用function.prototype.bind
- 为什么元素的宽度在页面加载之后和那一刻之后不同
- 获取HTML属性中CSS声明的值
- 没有在Angular应用程序中定义firebase(在firebase迁移之后)
- 对API数据使用声明性绑定
- Javascript复选框函数:;缺少:在属性id之后"
- 在刚刚调用的append函数之后,jquery.height()不会返回实际值
- (this)在函数声明之后
- 在if语句头声明的函数之后是未定义的
- 如何在“脚本”之后访问已声明的变量数据类型AJAX请求
- 比较语句>b,,(b = 0)表示javascript中变量声明之后
- 局部函数声明应该放在&;return&;之前或之后
- 匿名函数声明上的语法错误,但在有效语句之后没有
- 对于在事件声明之后添加的元素,使用什么代替 .live() (jQuery v1.9)
- 如果一个变量是在for循环之前声明的,那么它的值不应该在for循环之后可访问