提前賦值
預解析結束後,在逐行解讀**
console.
log(a)
var a =1;
//解析過程
var a;
console.
log(a)
a =1;
console.
log(b)
;var b =
123;
functionb(
);解析過程
var b;
//函式,在正式執行**前,賦值為整個函式塊
functionb(
);console.
log(b)
; b =
123;
console.
log(a)
var a=1;
functiona(
) console.
log(a)
var a=
3;
console.
log(a)
functiona(
) console.
log(a)
//解析過程
//預解析的過程
var a;
functiona(
)functiona(
)//逐行解析
console.
log(a)
// function a()
a =1;
console.
log(a)
// 1
a =3;
console.
log(a)
//3 console.
log(a)
//3
es5中只有全域性作用域和區域性作用域之分(函式內的為區域性作用域)
函式內可以取全域性作用域 全域性不可以取區域性作用域
var a=1;
//全域性作用域
function
fn1();
fn1(
)function
fn1();
fn1();
console.
log(a)
;//拿不到a
擴充套件
//1)
var a =1;
functionf1(
);f1(
);//1//2)
functionf1(
);f1(
);console.
log(a)
;//報錯
//3)
var a =1;
functionf1(
);f1(
);//1 console.
log(a)
;//2
//4)
// 全域性變數和區域性變數同名的坑
// (1)在全域性變數和區域性變數不同名時,其作用域是整個程式。詳見(3)
// (2)在全域性變數和區域性變數同名時,全域性變數的作用域不包含同名區域性變數的作用域。詳見(4)
var a =1;
functionf1(
);f1(
);//undefined
console.
log(a)
;//1
面試題
//面試題1
var a =10;
functionf1(
)f1()
;//f1()解析過程
var b;
var a;
var c;
b =2*a //nan
a =20;
c =21;
console.
log(b)
;//nan
console.
log(c)
;//21
//面試題2
var a=10;
function
test()
test()
;//test()解析過程
var a;
console.
log(a)
;//undefined
a =100;
console.
log(
this
.a);
//this === window var a=10;
console.
log(a)
;//100
JS學習之預解析
doctype html utf 8 js預解析 title 情況一 報錯,num未定義 情況二 坑1 console.log num undefined var num 10 由於 執行是先解析再執行 所以上面的 等價於 var num console.log num num 10 由於num在定...
JS高階系列 預解析和宣告提公升
程式在執行過程中,會先將 讀取到記憶體中檢查,會將所有的宣告在此時進行標記,從而讓js直譯器知道有這個名字,後面在使用名字的時候,不會出現未定義的錯誤 變數的宣告 變數的宣告就是讓js直譯器知道有這個名字,沒有任何資料與之對應 函式的宣告 函式的宣告分為函式名和函式體兩部分 函式名的宣告與變數的宣告...
js基礎 預解析
預解析 1.js引擎執行js分為兩步 預解析和 執行 1 預解析 js引擎會把js裡面所有的var 還有function 提公升到當前作用域的最前面 2 執行 按照 書寫的順序從上往下執行 2.預解析分為變數預解析 變數提公升 和函式預解析 函式提公升 1 變數提公升 就是把所有的變數宣告提公升到當...