概要概要
JavaScriptコードは、ブラウザーのJavaScriptパーサーによって実行されます。JavaScriptパーサーは、JavaScriptコードを実行するときに2つのステップに分けられます。预解析和代码执行
- 私たちのjsエンジンは2つのステップでjsを実行します:事前分析とコード実行
(1)事前分析:jsエンジンはjsのすべての変数と関数を現在のスコープの最前線に昇格させます
(2)コード実行:に従って書くコード上から下への順序 - 事前分析は
变量预解析
(変数の昇格)と函数预解析
(関数の昇格)に分けられます
(1)変数の昇格:昇格の割り当て操作なしで、すべての変数の宣言が現在のスコープの最上位に昇格されます
(2)関数の昇格:すべての関数の宣言がに昇格します関数を呼び出さずに現在のスコープの前 - 関数式の呼び出しは、関数式の下に記述する必要があります
ケーススタディ
1.結果はどうなりますか?
//案例1
var num = 10;
fun();
function fun (){
console.log(num);
var num = 20;
}
//相当于执行了以下的操作
var num;
function fun (){
var num;
console.log(num);
num = 20;
}
num = 10;
fun();
2.結果はどうなりますか?
var num = 10;
function fun (){
console.log(num);
var num = 20;
console.log(num);
}
fun();
//相当于以下代码
var num;
function fun (){
var num
console.log(num);
num = 20;
console.log(num);
}
num = 10;
fun();
3.結果はどうなりますか?
f1();
console.log(c);
console.log(b);
console.log(a);
function f1 (){
var a=b=c=9;
console.log(a);
console.log(b);
console.log(c);
}
//相当于以下代码
function f1 (){
var a;
a = b = c = 9;
//相当于 var a=9; b=9; c=9; b和c直接赋值前面 没有var声明 当全局变量看
console.log(a); //9
console.log(b); //9
console.log(c); //9
}
f1();
console.log(c); //9
console.log(b); //9
console.log(a); //打印报错 函数中的 var a 为局部变量无法打印