ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript に関するよくある面接の質問
JS スコープの問題に関しては、面接官が面接中に必ず尋ねる質問で、非常にイライラすることがあります。次の記事では、主に javascript スコープに関する一般的な面接の質問を紹介します。それを参照してください。以下を見てみましょう。
おすすめ関連記事: 2020年のjs面接質問の最も完全なコレクション(最新)
この記事は主にJavaScriptスコープの面接質問に関する関連コンテンツを共有し、あなたのためにそれらを共有します参考にして勉強してください。以下を見てみましょう。
1. スコープ:
スコープを理解する前に、まずいくつかの基本的な概念を理解する必要があります:
すべての 変数 と 関数 には独自のアクションのスコープがあり、その範囲を超えて使用することはできません。これをスコープといいます。
2. グローバル変数、ローカル変数:
1. グローバル変数:
(1) var a=1;
などのグローバル スコープで宣言された変数var a=1;
(2)只有赋值没有声明的值,如a=2;
(注:如果a=2在函数环境中,也是全局变量)
2.局部变量:
写入函数中的变量,叫做局部变量。
3.作用:
(1)程序的安全。
(2)内存的释放。
三、作用域链:
查找量的过程。先找自己局部环境有没有声明或者是函数,如果有,则查看声明有无赋值或者是函数的内容,如果没有,则向上一级查找。
四、预解析顺序:
每个程序都要做的工作,程序开始先预解析语法,标点符号是否有误,解析内存是否可容纳,解析变量……直到解析无误了,才开始按正常的流程顺序走。试想一下,如果没有预解析顺序,直接按流程顺序走,可能程序执行到最后一个函数,发现了语法错误,才开始报错,那性能要有多差啊!
顺序内容:
1.文件内引用的3f1c4e4b6b16bbbd69b2ee476dc4f83a块依次解析,从上到下连成一片。
2.每个script块内部的var(注意:只解析变量名,不解析值,如var a=2;
将var a解析在环境的开头,并不解析后面的值,只有当程序执行到var a=2
这行时,才会给变量赋值),function解析到本块的开头。
3.依次解析每个环境,将var
,function
(2) a=2;
など、宣言された値のない代入のみ (注: a=2 が関数環境にある場合、それはグローバル変数でもあります) 2 . ローカル変数:
関数に書き込まれる変数はローカル変数と呼ばれます。
(2) 記憶の解放。 3. スコープチェーン:🎜🎜🎜数量を見つけるプロセス。まず、ローカル環境に宣言または関数があるかどうかを確認します。存在する場合は、宣言に代入または関数の内容があるかどうかを確認します。ない場合は、1 つ上のレベルを検索します。 🎜🎜🎜🎜4. 事前解析シーケンス: 🎜🎜🎜🎜すべてのプログラムは、文法を事前解析し、句読点が正しいかどうか、メモリに対応できるかどうか、変数を解析することから始まります。 ...解析が正しく行われるまで、その後は通常のプロセス シーケンスに従います。想像してみてください。事前解析シーケンスがなく、プロセス シーケンスに直接従う場合、プログラムは最後の関数まで実行され、構文エラー🎜、エラーが報告され始めました。パフォーマンスはどれほど悪いでしょうか。 🎜🎜🎜🎜連続コンテンツ: 🎜🎜🎜🎜 1. ファイル内で参照されている 3f1c4e4b6b16bbbd69b2ee476dc4f83a ブロックが順番に解析され、上から下に接続されます。 🎜🎜🎜 2. 各スクリプト ブロック内の変数 (注: 変数名 🎜 のみを解析し、値は解析しません)
var a=2;
などの場合、環境の先頭で var a が解析され、プログラムが var a=2
行まで実行される場合にのみ、後続の値は解析されません。 > 、変数には値が割り当てられ、関数はこのブロックの先頭まで解析されます。 🎜🎜🎜 3. 各環境を順番に解析し、var
、function
を環境の先頭まで解析します。 🎜🎜🎜🎜 5. 応用シナリオ (スコープ関連のよくある面接の質問): 🎜🎜🎜var a="aa"; function test(){ alert(a);//undefined,函数执行后,在函数环境内,var a会预解析,当弹出a时,首先先找本层环境内有无声明,发现有。但是代码没有执行到赋值,所以结果是undefined。 var a="bb";//var a会预解析在函数开头,执行到这行才进行赋值 alert(a);//“bb” } test(); alert(a);//"aa" 找全局环境下的声明,找到了var a="aa"
var a="aa"; function test(){ alert(a);//“aa”,函数执行后,在函数环境内,没有找到本层环境关于a的声明,所以开始向上一层环境查找。 a="bb";//执行到这行开始改变全局a的量 } test(); alert(a);//"bb" 全局环境的a在函数执行时已经被改变
function test(){ b();//函数b会被预解析,因此可以调用,执行了输出1; var a=1; function b(){ console.log(1); console.log(a);//undefined var a=2; } } test();🎜🎜🎜 6. まとめ: 🎜🎜🎜🎜🎜 🎜 変数🎜のスコープを理解するには、次のことを理解することが重要です事前解析の順序を知ってから、スコープの範囲を判断します。これらはすべてルーチンです。まず、この層の環境に宣言があるかどうかを調べ、宣言がある場合は割り当てが行われているかどうかを確認します。はステートメントのみで代入ではないため、未定義です。宣言または代入がない場合は、見つかるまで 1 つ上のレベルを検索します。すべての実行環境が見つからない場合、コンソールは変数が見つからないというエラーを報告します。 🎜🎜関数の場合はさらに簡単です。このレイヤーの環境に事前に解析された関数があるかどうかを調べ、ある場合はそれを実行できます。そうでない場合でも、上を見てください。 🎜🎜🎜関連する学習に関する推奨事項: 🎜JavaScript ビデオチュートリアル🎜🎜🎜
以上がJavaScript に関するよくある面接の質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。