麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 16:21:13
字體:
來源:轉載
供稿:網友
js的解析器對函數聲明與函數表達式并不是一視同仁地對待的。對于函數聲明,js解析器會優先讀取,確保在所有代碼執行之前聲明已經被解析,而函數表達式,如同定義其它基本類型的變量一樣,只在執行到某一句時也會對其進行解析,
 

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

 

復制代碼代碼如下:

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能夠有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 亚洲成人在线视频网站 | 美女久久久久久久久 | 国产在线看一区 | 亚洲第一色婷婷 | 免费a观看| 久久蜜桃精品一区二区三区综合网 | 日本欧美一区二区三区视频麻豆 | 国产1区2 | 欧美亚洲国产日韩 | 国产激情精品一区二区三区 | 成人偷拍片视频在线观看 | 久久久久中精品中文字幕19 | 亚洲国产超高清a毛毛片 | 毛片免费视频播放 | 久久国产精品免费视频 | 亚洲一区二区中文字幕在线观看 | 久色porn | 久久青草影院 | 性欧美日本 | 国产真实孩交 | 国产 日韩 一区 | 亚洲国产视频在线 | 色中射| 欧美综合日韩 | av91肉丝一区二区电影 | 日本在线国产 | fc2成人免费人成在线观看播放 | 日本成人在线免费 | 13一14毛片免费看 | 欧美一级淫片007 | 精品国产一区二区三区天美传媒 | 国产亚洲精品久久午夜玫瑰园 | 亚洲视频在线网 | av在线免费观看网站 | 欧美日韩1区2区3区 黄片毛片一级 | 久久久婷婷一区二区三区不卡 | 亚洲精品成人久久 | av黄色片网站 | 久久久www成人免费毛片 | 国产99视频在线观看 | 一级在线视频 |