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

首頁 > 編程 > JavaScript > 正文

javascript 函數聲明與函數表達式的區別介紹

2019-11-20 21:55:13
字體:
來源:轉載
供稿:網友
還是一樣,先上代碼:
復制代碼 代碼如下:

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

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

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

這也算是JScript的bug吧。

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

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

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

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

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

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

你可能會想到,在使用eval對JSON進行執行的時候,JSON字符串通常被包含在一個圓括號里:eval('(' + json + ')'),這樣做的原因就是因為分組操作符,也就是這對括號,會讓解析器強制將JSON的花括號解析成表達式而不是代碼塊。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品久久久久久久久久东京 | 女人解衣喂奶电影 | 国产高潮国产高潮久久久91 | 特片网久久 | 视频一区国产 | 欧美视频不卡 | 欧美成人精品一级 | av黄色在线免费观看 | www.91sese| 欧美成人精品一区二区 | 在线免费观看日韩视频 | 精品国产一区二区三区久久久蜜月 | 在线91视频 | 欧美a v在线 | 亚洲国产网站 | 国产一区二区三区手机在线 | 91九色精品 | 欧美在线观看视频一区二区 | 羞羞的网站 | 鲁丝片一区二区三区免费入口 | 久久综合一区二区 | 国产亚洲高清在线精品不卡 | www.54271.com | 男女羞羞在线观看 | 一区二区三区在线观看免费 | 国产精品视频二区不卡 | 国产在线欧美日韩 | 国产一级毛片视频在线! | 日本aaaa片毛片免费观看视频 | 美国人成人在线视频 | 黄色网址免费在线 | 国产精品亚洲三区 | 一级α片免费看刺激高潮视频 | 精品成人国产在线观看男人呻吟 | 青青草成人免费视频在线 | 91美女福利视频 | 水卜樱一区二区av | 一级做a爰片性色毛片2021 | 国产免费一区视频 | av电影免费播放 | 成人午夜在线免费 |