これは、今日 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 を返します。
ここでテストされる主な知識ポイントは次のとおりです。
- オブジェクト内のメソッドによって呼び出される関数の場合、this はオブジェクト内のメソッドの this ではなく、トップレベルのオブジェクト ウィンドウを指します。
- let と const は es6 の構文です。es6 より前は、グローバル変数はトップレベル オブジェクト ウィンドウの下にありました。es6 以降、let と const はトップレベル オブジェクト ウィンドウから分離されたグローバル変数なので、ウィンドウはそれらを取得できません
-
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 です。
これは、トップレベルのオブジェクトが同じではないためです。