js預解析以及案例裡的坑

2021-09-11 14:47:06 字數 1298 閱讀 2377

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 所有...