JS函式和宣告提公升

2022-06-28 01:48:08 字數 2009 閱讀 9484

目錄語法:

function 函式名(形參1,形參2,...);
匿名函式:

var f1 = function(形參1,形參2,...)

f1(1,2)

立即執行函式:

(function(a, b))(1, 2);
在函式體內通過arguments物件來訪問引數陣列,從而獲取傳給函式的每個引數。可以通過索引取到引數。

function add(a,b)

add(1,2)

32

注意:函式只能返回乙個值,如果要返回多個值,要放在陣列中或物件中。

js變數的生命期從他們被宣告的時間開始,區域性變數會在函式執行完畢後刪除,全域性變數會在頁面關閉後刪除。

函式的作用域關係在定義階段就以確定,與呼叫位置無關。

首先在函式內部查詢變數,未找到則到外層函式查詢,逐步找到最外層。

var city = "beijing";

function f()

inner();

}

var city = "beijing";

function bar()

function f()

var ret = f();

ret();

var city = "beijing";

function f()

return inner;

}var res = f();

res();

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

在js中,**的執行是分兩步走的,1、解析。2、一步一步執行。

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

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

看幾個例子:

把上面的例子稍作改動,結果就會大不一樣,

再看乙個例子:

函式提公升

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

輸出結果:

生命不息 奮鬥不止

ƒ fn()

生命不息 奮鬥不止

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

輸出結果:

ƒ fn()

ƒ fn()

最後乙個例子

輸出結果:

ƒ fn()

hello

總結:

JS高階系列 預解析和宣告提公升

程式在執行過程中,會先將 讀取到記憶體中檢查,會將所有的宣告在此時進行標記,從而讓js直譯器知道有這個名字,後面在使用名字的時候,不會出現未定義的錯誤 變數的宣告 變數的宣告就是讓js直譯器知道有這個名字,沒有任何資料與之對應 函式的宣告 函式的宣告分為函式名和函式體兩部分 函式名的宣告與變數的宣告...

JS變數宣告和函式宣告提公升

很多時候,在直覺上,我們都會認為js 在執行時都是自上而下一行一行執行的,但是實際上,有一種情況會導致這個假設是錯誤的。a 2 var a console.log a 按照傳統眼光,console.log a 輸出的應該是undefined,因為var a在a 2之後。但是,輸出的是2。再看第二段 ...

JS 宣告提公升

一 js解析機制 遇到 script 標籤的話 js 就進行預解析,將變數 var 和 function 宣告提公升,但不會執行 function,然後就進入上下文執行,上下文執行還是執行預解析同樣操作,直到沒有 var 和 function,就開始執行上下文。二 宣告提公升 函式宣告和變數宣告總是...