JavaScriptコンテキストの条件の決定
2353 ワード
推奨サイト)
コメントサイトpoiema web
https://velog.io/@grinding_hannah/JavaScript-%ED%99%94%EC%82%B4%ED%91%9C%ED%95%A8%EC%88%98arrow-function-%EC%95%8C%EA%B8%B0
なぜなら、私は
スキャン(Scope、範囲)とは?
スコットランド識別子の有効範囲(変数にアクセスできる範囲).自分がどこにいるかによって、どのように発表されるかによってスキャンを決定します.
Javascriptでは、次の2つに分類できます.グローバルスキャン 地域スキャンローカル範囲 グローバルスコープ(Global scope):コード内の任意の場所で参照できます.
領域範囲(Local scopeまたはFunction-level scope):関数コードブロックで作成されたscope関数自体とサブ関数でのみ参照できます.
すべての変数にスキャンがあります.変数の観点からスケールを区別するには、次の2つに分類します.グローバル変数(Global variable):グローバル宣言変数.任意の場所で参照できます. 地域変数(Local variable):地域(関数)内で宣言された変数は、その地域およびその下部地域でのみ参照できます. 変数は、宣言された場所(グローバルまたはゾーン)に基づいてスキャンされます.
つまり、「グローバル宣言変数」は「グローバルスキャンを持つグローバル変数」であり、「領域(JavaScriptでは関数内部)で宣言される変数」は「領域スキャンを持つ領域変数」である.
グローバルスキャンを持つグローバル変数は、グローバル(コード内の任意の場所)で参照できます.
グローバル変数は、グローバルオブジェクトウィンドウのpropertyです.
領域(関数の内部)で宣言された領域変数は、その領域とその下部領域でのみ参照できます.
JavaScriptは関数レベルスキャン(function-level scope)に従います.
しかし、ECMAScript 6に導入された
前述したようにjavascriptは関数レベルスキャンなのでブロックレベルスキャンは使用しません
したがって、関数外で宣言された変数がコードブロック内で宣言されても、「グローバルスキャン」があります.
スコフチェーンとは?
JAvascriptエンジンは、識別子を検索するときに、まずその属するscopeで検索し、そのscopeに識別子がない場合は親scopeで再検索します.この現象を「スキャンチェーン」と呼び、すべてが重なる場合に発生します.
まず,関数位相を決定する基準は2つある.動的走査 電子顕微鏡 動的スキャンは、親スキャンがどこから呼び出されたかに基づいて決定されます.
Lexicalscopeは,関数がどこで「宣言」されるかによって位相を決定する.
🔷 JavaScriptはLexical Scopeに従うため、関数の宣言時に親Scopeを決定します.
関数をどこから呼び出すかは、スキャン決定に何の意味もありません.
私がこの問題を解くときに混同したのはこの点だ.
JAvascriptの上位機の標準はLexical Scopeなので、問題に近づくために呼び出された時点ではなく、「関数がどこで宣言されているか」に重点を置くべきです.
コメントサイトpoiema web
https://velog.io/@grinding_hannah/JavaScript-%ED%99%94%EC%82%B4%ED%91%9C%ED%95%A8%EC%88%98arrow-function-%EC%95%8C%EA%B8%B0
this
の概念を整理し、問題を解くには、いくつかの混同点がある.なぜなら、私は
scope
の概念を把握していないからです.scope
のコンセプトとjavascriptに関わる上位機のコンセプトを整理したいと思います.スキャン(Scope、範囲)とは?
スコットランド識別子の有効範囲(変数にアクセスできる範囲).自分がどこにいるかによって、どのように発表されるかによってスキャンを決定します.
Javascriptでは、次の2つに分類できます.
領域範囲(Local scopeまたはFunction-level scope):関数コードブロックで作成されたscope関数自体とサブ関数でのみ参照できます.
すべての変数にスキャンがあります.変数の観点からスケールを区別するには、次の2つに分類します.
つまり、「グローバル宣言変数」は「グローバルスキャンを持つグローバル変数」であり、「領域(JavaScriptでは関数内部)で宣言される変数」は「領域スキャンを持つ領域変数」である.
グローバルスキャンを持つグローバル変数は、グローバル(コード内の任意の場所)で参照できます.
グローバル変数は、グローバルオブジェクトウィンドウのpropertyです.
領域(関数の内部)で宣言された領域変数は、その領域とその下部領域でのみ参照できます.
JavaScriptは関数レベルスキャン(function-level scope)に従います.
함수 레벨 스코프
とは、関数コードブロック内で宣言された変数が関数コードブロック内でのみ有効であり、関数外部では無効である(参照できない)ことを意味する.しかし、ECMAScript 6に導入された
let
キーワードを用いてブロックレベルスキャンを用いることができる.前述したようにjavascriptは関数レベルスキャンなのでブロックレベルスキャンは使用しません
したがって、関数外で宣言された変数がコードブロック内で宣言されても、「グローバルスキャン」があります.
if (true) {
var x = 5;
}
console.log(x);
変数xはコードブロック内で宣言されますがjavascriptは関数レベルのscopeなのでxはグローバル変数ですスコフチェーンとは?
JAvascriptエンジンは、識別子を検索するときに、まずその属するscopeで検索し、そのscopeに識別子がない場合は親scopeで再検索します.この現象を「スキャンチェーン」と呼び、すべてが重なる場合に発生します.
まず,関数位相を決定する基準は2つある.
Lexicalscopeは,関数がどこで「宣言」されるかによって位相を決定する.
🔷 JavaScriptはLexical Scopeに従うため、関数の宣言時に親Scopeを決定します.
関数をどこから呼び出すかは、スキャン決定に何の意味もありません.
私がこの問題を解くときに混同したのはこの点だ.
JAvascriptの上位機の標準はLexical Scopeなので、問題に近づくために呼び出された時点ではなく、「関数がどこで宣言されているか」に重点を置くべきです.
Reference
この問題について(JavaScriptコンテキストの条件の決定), 我々は、より多くの情報をここで見つけました https://velog.io/@serenity/this-개념-정리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol