js作為一門解釋型指令碼語言,特點是邊解析邊執行。而預解析則是,提前解析的意思,也就是所說的變數提公升。
console.log(a);
var a = 10;//undefined
複製**
這裡的結果是undefined而並不是a is not defined。是因為var a被提公升到console.log之前,即
var a;
console.log(a);
var a = 10;//undefined
複製**
但是函式提公升則不是undefined的結果,而是結果正常。
function
foo();
foo();//aaa
複製**
vs
foo();//aaa
function
foo();
複製**
乙個鬧心的例子
foo();//20
var number =20;
function
foo()
複製**
函式的例子
foo();//undefined
var number =20;
function
foo()
複製**
函式提公升了,函式中的變數number也被提公升了,結果就成了undefined
隱藏的隱式全域性變數
以下剛開始,我的答案是9 9 9 報錯 報錯 報錯,後來才發現裡面有坑。
foo();
console.log(c);//9
console.log(b);//9
console.log(a);//報錯 a is not defined
function
foo()
複製**
以上相當於
function
foo()
foo();
console.log(c);//9
console.log(b);//9
console.log(a);//報錯 a is not defined
複製**
因為b跟c都是用隱式全域性變數,所以答案是9,而a是用var宣告的區域性變數,在函式以外訪問,會報錯。 js 預解析以及變數的提公升
js在執行之前會進行預解析。什麼叫預解析?預 提前 解析 編譯 預解析通俗的說 js在執行 之前會讀取js 會將變數宣告提前。注意 只是提公升變數,並不是提公升變數賦值。對於es6中的let不具體 變數提公升。例子 1如上 不並不會報錯,因為在之前js 之前,在預解析的時候,顯示宣告的函式 test...
JS解析器的預解析機制
預解析 函式要先定義後呼叫不是指 書寫順序 舉個栗子 函式的兩種字面量的定義方式 1 console.log add 1 console在前 function add no1,no2 function add no1,no2 函式宣告不加 console.log add 1 console語句在後結...
js的預解析和作用域
預解析指的就是,在js檔案或者script裡面的 在正式開始執行之前,進行的一些解析工作。這個工作很簡單,就是在全域性中尋找var關鍵字宣告的變數和通過function關鍵字宣告的函式。1.尋找 var function 引數 等關鍵字,根據var a提前設定為 a 未定義 undefined 所有...