jsバイトの面接での質問 コードの読み取りに関する質問が強化されました

これは、今日 Niuke で見られた中国地質大学でのインタビューにおける上海バイトのフロントエンドの質問です。コードの質問を読んでください。

次の段落はそこから移動されたものです

********

コードを見て答えを言ってください。これが何を指しているのかについては、私は間違っていましたし、なぜ補足する必要があるのか​​さえわかりません。

const length = 10
const fn = function () {
    return this.length + 1
}
const obj = {
    length: 5,
    test: function () {
        return fn()
    }

}
//下面输出是什么?
console.log(obj.test())

*******

まず答えは1ですが、

fn は呼び出すと通常の関数なので、

これはトップレベルのオブジェクトウィンドウを指します。

es6 では、let と const がグローバル変数として使用される場合、それらはトップレベルのオブジェクト ウィンドウに表示されません。

このとき this.length は window.length、つまりフレーム数で変数ではなくメソッドなので undefine ではなく 0 になっているので mdn に行って https://developer を見つけます。 mozilla.org/zh -CN/docs/Web/API/Window/length

したがって、 this.length の結果は 0 で、+1 は 1 を返します。

ここでテストされる主な知識ポイントは次のとおりです

  1. オブジェクト内のメソッドによって呼び出される関数の場合、this はオブジェクト内のメソッドの this ではなく、トップレベルのオブジェクト ウィンドウを指します。
  2. let と const は es6 の構文です。es6 より前は、グローバル変数はトップレベル オブジェクト ウィンドウの下にありました。es6 以降、let と const はトップレベル オブジェクト ウィンドウから分離されたグローバル変数なので、ウィンドウはそれらを取得できません
  3.  window.length はフレーム数です。mdn に移動してhttps://developer.mozilla.org/zh-CN/docs/Web/API/Window/lengthを見つけます。

知らせ:

 1.node.jsのトップレベルオブジェクト:グローバル
2.ブラウザウィンドウ
3.jquery $

ブラウザの答えは 0+1=1 ですが、ノードの答えは undefine+1=NaN です。

これは、トップレベルのオブジェクトが同じではないためです。

おすすめ

転載: blog.csdn.net/weixin_43465508/article/details/131076659