javascript - this.variable 与变量子作用域

标签 javascript closures

我有一些 JS 代码,我想在其子方法中返回全局对象的实例(想想流畅的接口(interface)):

myGlobalVar = function() {
    this.self = this;
    this.Whatever = function() {
        //return self; // why does that FAIL??
        return this.self; // why does that WORK??
    }
}

我本以为我会返回 self 但失败了。 return this.self 成功,但我认为子函数中的 this 会引用所述函数。为什么这有效?

最佳答案

在 javascript 中,函数中 this 的值由函数的调用者确定。

当您调用 obj.method() 时,this 的值会在 method()< 内部设置为 obj/。因此,在上面的示例中,当您调用 myGlobalVar.Whatever() 时,Whatever() 内的 this 的值将是 myGlobalVar 因此要引用 sefl,您可以使用 this.self,正如您所发现的。

self all 本身不起作用,因为它本身不是当前作用域中的变量。它是 myGlobalVar 的属性,因此当 this === myGlobalVar 时只能被引用为 myGlobalVar.selfthis.self 。 JavaScript 不会自动检查当前对象的属性来解析符号。您只能通过专门引用托管属性的对象来访问对象的属性,如 this.self 中所示。

<小时/>

还有其他方法可以更改 this 的值。如果在没有 obj 上下文的情况下调用 Whatever(),例如:

var fn = myGlobalVar.Whatever;
fn();

那么,this 的值要么是常规 JS 中的全局对象,要么是 JS 严格模式中的 undefined

<小时/>

每个函数上还有 .call().apply() 方法,允许您直接指定 this 的内容> 要设置为方法内部的值,如 myGlobalVar.Whatever.call(myOtherGlobalVar)

关于javascript - this.variable 与变量子作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21273327/

相关文章:

javascript - 是否有关于 IE 6 注意事项的良好存储库?

javascript - 在脚本rails haml文件中嵌入ruby,如何?

Javascript 闭包 VS dojo lang.hitch

kotlin - 在 Kotlin 中,如何传递参数以便异步作用域保留它?

php - 确定闭包在 PHP 中是否是静态的

javascript - 除了异常之外,是否可以在 JavaScript 中实现非本地返回?

javascript - 我需要使用递归来导航 DOM 中的每个元素的帮助

javascript - 如果你想在 Javascript 中强制对变量进行垃圾回收,将其设置为 null 还是 undefined 更好?

javascript - Jquery 悬停在标签上持续触发

javascript - 需要很长时间才能完成的事件是否会更改 "Mutable variable"的值