JavaScript のスコープ チェーンは、関数の定義時または呼び出し時に決定されますか?
欧阳克
欧阳克 2017-07-05 10:42:15
0
5
1121

次のクロージャー問題を参照してください

リーリー

出力は 20 ではなく 10 です。x が値を取得するとき、スコープ チェーンに沿って検索していませんか? 関数の作成時にスコープ チェーンが決定されている場合、結果は 10 になります。関数が呼び出されたときに決定され、20 になるはずです。スコープ チェーンに関する正確な記述はありますか?ここでの正確なスコープチェーンはどのようにあるべきでしょうか? fn と show は同じレベルですか、それとも fn は show 内にありますか?

欧阳克
欧阳克

温故而知新,可以为师矣。 博客:www.ouyangke.com

全員に返信(5)
学霸

スコープチェーンは関数の定義時に決定されます。

変数は関数のドメイン内でのみ定義されるため、関数内で定義された変数には関数の外部からはアクセスできません。同様に、関数は、そのスコープ内で定義された任意の変数および関数にアクセスできます。つまり、グローバル スコープで定義された関数は、グローバル スコープで定義されたすべての変数にアクセスできます。別の関数内で定義された関数は、その親関数で定義されたすべての変数、および親関数がアクセスできるその他の変数にもアクセスできます。

https://developer.mozilla.org...
いいねを押す +0
習慣沉默

スコープチェーンは動的であるため、呼び出し時に決定されます。
しかし、あなたのコードでは、クロージャによって定義された function() はバインディングの最も外側のスコープです
function によって宣言された関数は、デフォルトでバインディングの最も外側のスコープになります

(私も勉強中です…)

いいねを押す +0
洪涛

関数の作成時にグローバル変数オブジェクトを含むスコープ チェーンを作成し、それを内部の [[Scope]] 属性に保存します。関数が実行されると、[[Scope]] 属性内のオブジェクトをコピーすることによって実行環境が作成され、実行環境のスコープ チェーンが構築され、独自のアクティブ オブジェクトがフロントエンドにプッシュされます。スコープ チェーンを使用して完全な関数を形成します。 [[Scope]] は、値のコピーではなく、グローバル変数への参照を保持します。

リーリー
いいねを押す +0
阿神

クロージャの呼び出しメソッドは次の効果と同等です。以下の例は、スコープチェーンが関数定義時の位置に関連していることを比較して示しています。

リーリー

関連する質問のリンクを追加しました。 /q/10…。スコープチェーンについての議論があります。

いいねを押す +0
扔个三星炸死你

非厳密モードでは、IIFE のこのポイントは window です

上記は正しくありません。 。 。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!