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