javascript - 非顶级函数是任何对象的成员吗?

标签 javascript

我知道顶级函数是 window 的成员对象,与 this 一致它们里面指的是 window .

但是对于非顶级函数,this仍然是window ,但他们不是 window 的成员!

这是一些代码:

function topLevel1() {
    alert(this)
}

function topLevel2() {
    function inner() {
        alert(this)
    }

    inner()
}

topLevel1()                // alerts DOMWindow
alert(window.topLevel1)    // alerts text of topLevel1, as expected

topLevel2()                   // again, alerts DOMWindow
alert(window.inner)           // undefined
alert(window.topLevel2.inner) // undefined
  1. 如果inner既不是 window 的成员也不属于topLevel2 ,是谁的成员?
  2. 怎么会是thiswindow ,但它不是 window的成员(member)?
  3. 这不是 Javascript 中的一条定律:如果 this == owner ,然后通过 owner. 调用当前方法? (特殊情况除外,如构造函数、 applycall 等)

最佳答案

同样,this函数的值(value)取决于函数的调用方式,而不是函数的位置或设计方式。

如果你只是调用一个函数

foobar()

代码中的任何位置,就像这样,它的 this值将始终是 window (非严格模式)或undefined (严格的)。现在有很多方法可以修改this ,就像用 .apply() 调用函数一样, .call().bind() 。所有这些方法都让您有机会修改 this给定函数的值。另外,如果您使用 new 调用函数关键字,this引用一个新创建的对象(也返回)。

因此,函数的位置告诉您其上下文为零或 this .

现在回答您的具体问题:

  1. innerActivation Object 的成员来自topLevel2 (ES3)

  2. 如上所述

  3. 我想上面也涵盖了

关于javascript - 非顶级函数是任何对象的成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9814733/

相关文章:

javascript - 如何在javascript中处理空 session

javascript - 浏览器Javascript类(不是node.js)中私有(private)方法的语法是什么?

php - 如何在上传到服务器之前预处理本地 CSV 文件?

javascript - 如何限制通过ajax发布的JS对象

javascript - 根据ajax拉入的值更改html单元格边框

javascript - 如果子字符串为空,如何跳过并避免控制台中出现错误?

javascript - 检查用户使用 JavaScript 添加的选项

javascript - 结合旧的和新的设置

javascript - ES6 React 组件中的 PureRenderMixin

javascript - 为什么 VS Code 不再显示智能感知