日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript 函数声明与函数表达式的区别

發布時間:2025/4/5 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript 函数声明与函数表达式的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

還是一樣,先上代碼:

<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的花括號解析成表達式而不是代碼塊。

轉載于:https://www.cnblogs.com/yangzhi/p/3576531.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的javascript 函数声明与函数表达式的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。