JavaScript-変数アップ
2632 ワード
まず例を見てみます.
実際の解析過程はこうです.
例を説明します.局所変数numの声明があるので、大域変数numは無視されますが、局部変数の声明は関数の先頭に引き上げられました.賦値がないので、consolie.log(num)はundefinedを出力します.
関数と変数が同名の場合、どのようにアップグレードされますか?見に来てください
もちろん、ここでは理解を助けるだけの例です.実際の開発では絶対に変数と関数を同名にしてはいけません.
var num = 10;
fun();
function fun(){
console.log(num); // undefined
var num = 20;
console.log(num); // 20
}
ここで一つの疑問があります.どうしてundefinedですか?10じゃないですか?実際の解析過程はこうです.
function fun(){
var num //
console.log(num);
num= 20; //
console.log(num);
}
var num = 10;
fun();
これはJavaScriptの変数アップグレードです.JavaScriptの関数内で定義されている局部変数は、どの行の声明の割り当てに関わらず、解析時に関数宣言を関数の先頭部分に強制的に引き上げますが、変数の割り当てはコードを書く時に変数の行数によって与えられます.賦課は引き上げられていません.ただ声明が引き上げられました.例を説明します.局所変数numの声明があるので、大域変数numは無視されますが、局部変数の声明は関数の先頭に引き上げられました.賦値がないので、consolie.log(num)はundefinedを出力します.
関数と変数が同名の場合、どのようにアップグレードされますか?見に来てください
console.log(showNum); // showNum
var showNum = 10;
function showNum(){}
この解析過程はこうです.function showNum(){}
var showNum //
console.log(showNum);
showNum = 10;
これは同じ識別子を持っている場合、変数宣言と関数がアップグレードされるからです.関数宣言は変数宣言を上書きしますが、変数の割り当ては上書きされません.直接コードをかけて、より直接的に考えて、例のコードを少し変えます.var showNum = 10;
console.log(showNum); // 10
function showNum(){}
ここを見て解析プロセスを書きません.変数宣言の同時初期化や値付けは関数よりも優先度が高いので、無視されません.もちろん、ここでは理解を助けるだけの例です.実際の開発では絶対に変数と関数を同名にしてはいけません.