javascriptはシリーズを深く理解します.

1575 ワード

javascriptはシリーズの文章のURLを深く理解します.https://www.jianshu.com/p/451eed9094f5
これらを理解する前に、まず変数の向上の概念とブロックの運行方式について説明します.後の理解に役立ちます.
変数の昇格
JavaScriptエンジンの動作方法は、先にコードを解析し、宣言されたすべての変数を取得し(ここでは変数名のみに注意してください.賦課されていません.)、もう1行ずつ実行します.この結果、すべての変数のステートメント文が、コードの先頭に引き上げられます.これを変数アップといいます.
console.log(a);
    var a=6;
これらのコードを書いたら、javascriptはどうやって実行しますか?
var a;
console.log(a);
a=1;
undefinedを出力します.まだ賦課されていません.
ブロック
JavaScriptは大きな括弧を使って、複数の関連する語句を組み合わせて「ブロック」と呼ぶ.
一般的なブロックはif、for、while、switch、functionと他の強いタイプの言語の違いがあります.functionを除いて、varコマンドにとって、JavaScriptのブロックは単独の作用領域を構成しません.つまり、{をプラスするかどうかは区別がないということです.
if(true){
        var i=0;
    }
console.log(i);//  0
for(var i=0;i<3;i++){
        
}
console.log(i);//  3
関数名の昇格
変数アップグレードと同様に、javascriptエンジンは関数名を変数名として扱いますので、functionコマンド宣言関数を使用すると、関数全体が変数宣言のようになります.ここで言っているのはこの関数がコードの先頭に引き上げられたということです.だから
        fn();
        function fn(){
            console.log("111");
        }
になります
function fn(){
            console.log("111");
        }
 fn();
だからこのような状況は間違いないです.
しかし、赋値文で関数を定義すると、JavaScriptはエラーとなります.
        fn();
        var fn=function(){
            console.log(1111);
        }
この形式は
       var fn;
        fn();
        fn=function(){
            console.log(1111);
        }
fn変数名はトップに引き上げられます.未割り当て値はundefinedですので、呼び出し時にエラーが発生します.
参考の内容https://wangdoc.com/javascript/types/function.html