Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptの自己実行無名関数のこの問題は何ですか?


ここにサンプルコードスニペットがあり、このスニペットの可能な出力を示し、その説明を提供する必要があるとします

var name = 'Zakir';
(() => {
   name = 'Rahul';
   return;
   console.log(name);
   function name(){
      let lastName = 'Singh';
   }
})();
console.log(name);

素朴なアプローチでこの問題を1行ずつ見ていきましょう

1→変数名に格納された「Zakir」

3→自己実行無名関数の内部に入ります

4→変数名が「Rahul」に再初期化されます

5→returnステートメントが検出されたため、関数を終了します

15→現在の値が「Rahul」である画面に名前変数を出力します

したがって、最終的な出力は

Rahul

しかし、残念ながら、それは間違っています。コードをもう一度調べて、どこが間違っているのかを確認しましょう。今回は、変数と関数の巻き上げの概念を念頭に置いてください。

1→変数名に格納された「Zakir」

3→自己実行無名関数の内部に入ります

関数に入ると、関数のホイストが実行され、自己実行関数の下部に定義されている関数name()が自己実行関数の最上部にホイストされます。その中間状態では、コードは次のようになります。 / P>

let name = 'Zakir';
(() => {
   let name;
   name = 'Rahul';
   return;
   console.log(name);
   name = function(){
      let lastName = 'Singh';
   }
})();
console.log(name);

変数/関数がスコープの一番上に持ち上げられると、それは定義されて初期化されるだけであり、実際の位置で初期化され、一番上では未定義ですが、存在することに注意してください。

したがって、変数名が再初期化されると、再初期化されるのはローカル変数名であり、グローバル変数ではありません。その後、自己実行関数から戻り、グローバル変数名をコンソールに出力します。コンソールには「Zakir」が保持されています。したがって、出力は-

になります。

出力

Zakir

  1. JavaScriptの無名関数とは何ですか?

    関数式は、関数宣言と似ており、同じ構文を持っています。「名前付き」関数式(たとえば、式の名前が呼び出しスタックで使用される場合があります)または「無名」関数式を定義できます。 無名関数式の例(名前は使用されていません)- var myFunction = function() {    // Function code } この関数は、それを参照する変数名を使用して呼び出すことができます- myFunction() 結論として、無名関数は保存されないが変数に関連付けられている関数です。匿名関数は、標準関数と同じように、入力を受け入れて出力を返すことができます

  2. クラスの関数の前にある「get」キーワードとは何ですか-JavaScript?

    getキーワードは、C#、Java、その他のテクノロジーなどのゲッター関数として使用できます。 クラスでgetを使って関数を設定します- class Employee {    constructor(name) {    this.name = name;    }    get fullName() {       return this.name;    } } 例 以下は、get-の例を表示するコードです。 class Employee {