目錄語法:
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,就開始執行上下文。二 宣告提公升 函式宣告和變數宣告總是...