最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript 函數(shù)聲明與函數(shù)表達式的區(qū)別介紹

 更新時間:2013年10月05日 15:15:41   作者:  
javascript中的函數(shù)聲明與函數(shù)表達式使用比較頻繁,可能很多的朋友都不知道他們之間的區(qū)別,在此為大家詳細介紹下,希望對大家有所幫助
還是一樣,先上代碼:
復(fù)制代碼 代碼如下:

<script>
var f = function g() {
return 1;
};
if (false) {
f = function g(){
return 2;
};
}
alert(g()); // 2
</script>

把這段代碼扔到IE 6 里面和chorme里面是完全不同的兩種效果。

這里輸出2 是在ie6里面的效果,如果在chorme會出現(xiàn)g沒有定義。

這也算是JScript的bug吧。

在這里很明顯,這里的只是定義了g的函數(shù)表達式而已。包括在if的條件語句中,也只是定義了函數(shù)表達式,沒有去聲明函數(shù)。

那么這樣直接訪問肯定是會出錯的。

那么對于何為聲明,何為函數(shù)表達式呢?

在ECMAScript中,創(chuàng)建函數(shù)的最常用的兩個方法是函數(shù)表達式和函數(shù)聲明,兩者期間的區(qū)別是有點暈,因為ECMA規(guī)范只明確了一點:函數(shù)聲明必須帶有標示符(Identifier)(就是大家常說的函數(shù)名稱),而函數(shù)表達式則可以省略這個標示符:
函數(shù)聲明:
  function 函數(shù)名稱 (參數(shù):可選){ 函數(shù)體 }
  函數(shù)表達式:
  function 函數(shù)名稱(可選)(參數(shù):可選){ 函數(shù)體 }

所以,可以看出,如果不聲明函數(shù)名稱,它肯定是表達式,可如果聲明了函數(shù)名稱的話,如何判斷是函數(shù)聲明還是函數(shù)表達式呢?ECMAScript是通過上下文來區(qū)分的,如果function foo(){}是作為賦值表達式的一部分的話,那它就是一個函數(shù)表達式,如果function foo(){}被包含在一個函數(shù)體內(nèi),或者位于程序的最頂部的話,那它就是一個函數(shù)聲明。

還有一種函數(shù)表達式不太常見,就是被括號括住的(function foo(){}),他是表達式的原因是因為括號 ()是一個分組操作符,它的內(nèi)部只能包含表達式。

你可能會想到,在使用eval對JSON進行執(zhí)行的時候,JSON字符串通常被包含在一個圓括號里:eval('(' + json + ')'),這樣做的原因就是因為分組操作符,也就是這對括號,會讓解析器強制將JSON的花括號解析成表達式而不是代碼塊。

相關(guān)文章

最新評論

盐城市| 灵山县| 安国市| 易门县| 洪江市| 绩溪县| 阳江市| 广东省| 特克斯县| 庄浪县| 南部县| 朝阳市| 车险| 灌南县| 原阳县| 大渡口区| 常宁市| 山西省| 盐城市| 林口县| 宝兴县| 芷江| 尼勒克县| 和顺县| 民勤县| 南开区| 鄂温| 磐石市| 驻马店市| 夏邑县| 镇沅| 浑源县| 康马县| 勐海县| 阳朔县| 浮山县| 剑阁县| 洪洞县| 蓬莱市| 龙海市| 蛟河市|