JavaScript函式宣告與運算式小結

來源:互聯網
上載者:User

函式宣告與運算式
函數是JavaScript中的一等對象,這意味著可以把函數像其它值一樣傳遞。
一個常見的用法是把匿名函數作為回呼函數傳遞對非同步函數中。
函式宣告
function foo() {}
上面的方法會在執行前被 解析(hoisted),因此它存在於當前內容相關的任意一個地方,
即使在函數定義體的上面被調用也是對的。
foo(); // 正常運行,因為foo在代碼運行前已經被建立
function foo() {}
函數賦值運算式
var foo = function() {};
這個例子把一個匿名的函數賦值給變數 foo。
foo; // 'undefined'
foo(); // 出錯:TypeError
var foo = function() {};
由於 var 定義了一個聲明語句,對變數 foo 的解析是在代碼運行之前,因此 foo 變數在代碼運行時已經被定義過了。
但是由於指派陳述式只在運行時執行,因此在相應代碼執行之前, foo 的值預設為 undefined。
命名函數的賦值運算式
另外一個特殊的情況是將命名函數賦值給一個變數。
var foo = function bar() {
    bar(); // 正常運行
}
bar(); // 出錯:ReferenceError
bar 函式宣告外是不可見的,這是因為我們已經把函數賦值給了 foo;
然而在 bar 內部依然可見。這是由於 JavaScript 的 命名處理 所致,函數名在函數內總是可見的。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。