1. 程式人生 > 程式設計 >JS變數提升及函式提升例項解析

JS變數提升及函式提升例項解析

1在js中只有兩種作用域

a:全域性作用域

b:函式作用域

在ES6之前,js是沒有塊級作用域。

首先來解釋一下什麼是沒有塊級作用域?

JS變數提升及函式提升例項解析

所以此時 是可以列印輸出變數a的值。

2:什麼是變數提升?

在我們的js中,程式碼的執行時分兩步走的,1、預解析 2、一步一步執行

在預解析階段:首先會在全域性作用域內,js解析器會找所有的 var 、function 、引數,並提前到當前作用域的最頂上去(變數的賦值操作不會提前,還在原來的地方),此時並沒有執行程式碼。

然後再開始一行一行執行程式碼。遇到了函式呼叫,於是進入到函式作用域內,又開始分兩步驟走,1、預解析 2、一步一步執行。以此類推。

那麼變數提升就是變數宣告會被提升到作用域的最頂上去,也就是該變數不管是在作用域的哪個地方宣告的,都會提升到作作用域的最頂上去。

即變數可以在宣告之前使用,值為undefined。

JS變數提升及函式提升例項解析

那麼上面這種寫法其實等價於下面這種寫法:

JS變數提升及函式提升例項解析

看幾個例子:

JS變數提升及函式提升例項解析

把上面的例子稍作改動:

結果就會大不一樣,

JS變數提升及函式提升例項解析

再看一個例子:

JS變數提升及函式提升例項解析

3:什麼是函式提升?

JS變數提升及函式提升例項解析

輸出的結果是:

JS變數提升及函式提升例項解析

注意:函式宣告式,會將函式的宣告和定義一起提升到作用域的最頂上去。

如果是這種寫法:函式表示式宣告的函式

JS變數提升及函式提升例項解析

例子:

JS變數提升及函式提升例項解析

輸出的結果是:

JS變數提升及函式提升例項解析

最後的總結:

1:所有的宣告都會提升到作用域的最頂上去。

2:同一個變數只會宣告一次,其他的會被忽略掉。

3:函式宣告的優先順序高於變數申明的優先順序,並且函式宣告和函式定義的部分一起被提升。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。