国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js中函數聲明與函數表達式

2019-11-20 12:22:35
字體:
來源:轉載
供稿:網友

目前為止,我們一直沒有對函數聲明和函數表達式加以區別。而實際上,解析器在向執行環境中加載數據時,對函數聲明和函數表達式并非一視同仁。解析器會率先讀取函數聲明,并使其在執行任何代碼之前可用(可以訪問);至于函數表達式,則必須等到解析器執行到它所在的代碼行,才會真正被解釋執行。如下例子:

復制代碼 代碼如下:

alert(sum(10,10));
function sum(num1,num2)
{
    return num1+num2;
}

  以上代碼完全可以正確執行,因為在代碼開始執行之前,解析器就已經通過一個名為函數聲明提升(function declaration hoisting)的過程,讀取并將函數聲明添加到執行環境中。對代碼求值時,JavaScript引擎在第一遍會聲明函數并將它們放到源代碼樹的頂部。所以,即使聲明函數的代碼在調用它的代碼后面,JavaScript引擎也能把函數聲明提升到頂部。如果像下面的例子所示,把上面的函數聲明改為等價的函數表達式,就會在執行的時候出現錯誤。

復制代碼 代碼如下:

alert(sum(10,10));
var sum=function(num1,num2)
{
    return num1+num2;
};

  以上代碼會在運行的時候出現錯誤,原因在于函數位于一個初始化語句中,而不是一個函數聲明。換句話講,在執行到函數所在的語句之前,變量sum中不會保存有對函數的引用;而且,由于第一行代碼就會導致“unexpected identifier”(意外標識符)錯誤,實際上也不會執行到下一行。

  除了聲明時候可以通過變量訪問函數這一點區別之外,函數聲明與函數表達式的語法其實是等價的。

  注:也可以同時調用函數聲明和函數表達式,例如 var sum=function sum(){}。不過,這種語法在Safari中會導致錯誤。

以上所述就是本文的全部內容了,希望對大家學習javascript能夠有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盘山县| 新昌县| 小金县| 芦溪县| 怀宁县| 娱乐| 涟水县| 汉中市| 河北区| 潍坊市| 仙桃市| 镇巴县| 连城县| 三都| 吐鲁番市| 彝良县| 襄城县| 丹凤县| 常州市| 西乌| 泌阳县| 沾益县| 石河子市| 浦城县| 临清市| 青阳县| 舒城县| 哈尔滨市| 樟树市| 铁力市| 望都县| 郴州市| 合肥市| 鄂尔多斯市| 当涂县| 连山| 玛纳斯县| 武清区| 绥化市| 中卫市| 永德县|