ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript に関するよくある面接の質問

JavaScript に関するよくある面接の質問

微波
微波オリジナル
2017-06-28 13:26:243578ブラウズ

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 . ローカル変数:

関数に書き込まれる変数はローカル変数と呼ばれます。

3. 機能:

(1) プログラムの安全性。

(2) 記憶の解放。

3. スコープチェーン:
🎜🎜🎜数量を見つけるプロセス。まず、ローカル環境に宣言または関数があるかどうかを確認します。存在する場合は、宣言に代入または関数の内容があるかどうかを確認します。ない場合は、1 つ上のレベルを検索します。 🎜🎜🎜🎜4. 事前解析シーケンス: 🎜🎜🎜🎜すべてのプログラムは、文法を事前解析し、句読点が正しいかどうか、メモリに対応できるかどうか、変数を解析することから始まります。 ...解析が正しく行われるまで、その後は通常のプロセス シーケンスに従います。想像してみてください。事前解析シーケンスがなく、プロセス シーケンスに直接従う場合、プログラムは最後の関数まで実行され、構文エラー🎜、エラーが報告され始めました。パフォーマンスはどれほど悪いでしょうか。 🎜🎜🎜🎜連続コンテンツ: 🎜🎜🎜🎜 1. ファイル内で参照されている 3f1c4e4b6b16bbbd69b2ee476dc4f83a ブロックが順番に解析され、上から下に接続されます。 🎜🎜🎜 2. 各スクリプト ブロック内の変数 (注: 変数名 🎜 のみを解析し、値は解析しません) var a=2; などの場合、環境の先頭で var a が解析され、プログラムが var a=2行まで実行される場合にのみ、後続の値は解析されません。 > 、変数には値が割り当てられ、関数はこのブロックの先頭まで解析されます。 🎜🎜🎜 3. 各環境を順番に解析し、varfunction を環境の先頭まで解析します。 🎜🎜🎜🎜 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。