我见过这样的事情:
function fnx(){
ctrl = this;
this.thisedVar = "thisedVar from fnx"
}
我试图弄清楚它有什么用。 如果执行该函数,然后将其与 Ctrl 进行比较,则它们是相同的:
fnx();
console.log(this === ctrl) // true
这就是为什么我不明白将this
分配给变量的目的是什么。
请问谁能解释一下?谢谢。
var a = function() {
var THIS = this;
this.s = "Hello World";
this.runMe = function() {
window.setTimeout(function() {
console.log(this.s);
}, 100);
}
}
var a2 = function() {
var THIS = this;
this.s = "Hello World";
this.runMe = function() {
window.setTimeout(function() {
console.log(THIS.s);
}, 100);
}
}
b = new(a);
b.runMe();
b2 = new(a2);
b2.runMe()
输出:
定义
世界您好
类 a(对象 b(返回 undefined,因为该this
在回调范围内。
类 a2(对象 b2(返回Hello World
,因为该this
属于类 a2。
当您将变量分配给值而不使用var
时,它指的是全局变量。因此,如果您将this
分配给ctrl
则意味着您将 Window obecjtthis
分配给全局变量 'ctrl。
因此,当您将ctrl
与this
(再次是 Window(对象进行比较时,它是相同的,因为您在函数执行后进行匹配。
在大多数情况下,此值由函数的调用方式(运行时绑定(决定。它不能在执行期间通过赋值设置,并且每次调用函数时它可能会有所不同。
将 THIS 分配给变量,以便保存此值。
阅读更多:https://medium.com/tech-tajawal/javascript-this-4-rules-7354abdb274c