搜尋
首頁web前端js教程javascript 函數宣告與函數表達式的差異介紹_javascript技巧

還是一樣,先上程式碼:

複製程式碼 程式碼如下:

<script> >var f = function g() { <BR>return 1; <BR>}; <BR>if (false) { <BR>f = function g(){ <BR>return 2; <BR>}; <BR>} <BR>alert(g()); // 2 <BR></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的花括號解析成表達式而不是程式碼區塊。
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
C++ 函数声明中的默认参数:全面解析其声明和用法C++ 函数声明中的默认参数:全面解析其声明和用法May 02, 2024 pm 03:09 PM

C++中的默认参数提供对函数参数指定默认值的功能,从而增强代码可读性、简洁性和灵活性。声明默认参数:在函数声明中将参数后加上"="符号,后跟默认值。用法:函数调用时,若未提供可选参数,则会使用默认值。实战案例:计算两个数之和的函数,一个参数必填,另一个可填并有默认值0。优点:增强可读性、增加灵活性、减少样板代码。注意事项:只能在声明中指定,必须位于末尾,类型必须兼容。

C++ 函数的声明和定义的顺序有什么影响?C++ 函数的声明和定义的顺序有什么影响?Apr 19, 2024 pm 01:42 PM

在C++中,函数声明和定义的顺序影响编译和链接过程。最常见的是声明在前,定义在后;也可使用“forwarddeclaration”将定义放在声明前;如果两者同时存在,编译器将忽略声明,仅使用定义。

C++ 函数声明和定义有什么区别?C++ 函数声明和定义有什么区别?Apr 18, 2024 pm 04:03 PM

函数声明告知编译器函数的存在,不包含实现,用于类型检查。函数定义提供实际实现,包含函数体。区分的关键特征包括:目的、位置、作用。理解差异对于编写有效且可维护的C++代码至关重要。

C++ 函数的声明和定义C++ 函数的声明和定义Apr 11, 2024 pm 01:27 PM

函数声明和定义在C++中是必要的,函数声明指定函数的返回类型、名称和参数,而函数定义包含函数体和实现。首先声明函数,然后在程序中使用它并传递所需的参数。使用return语句从函数中返回一个值。

C++编译错误:函数调用与函数声明不符,应该怎样解决?C++编译错误:函数调用与函数声明不符,应该怎样解决?Aug 22, 2023 pm 12:39 PM

C++编译错误:函数调用与函数声明不符,应该怎样解决?在开发C++程序时,难免会遇到一些编译错误,其中之一常见的错误是函数调用与函数声明不符的错误。这种错误广泛存在于C++程序员中,由于不注意函数声明的正确性,导致编译问题,最终浪费时间和精力修复问题,影响开发效率。避免这种错误的方法需要遵循一些规范和标准实践,下面让我们来了解一下。什么是函数调用与函数声明不

C++ 函数声明中的[[nodiscard]]:揭开忽略返回值后果的神秘面纱C++ 函数声明中的[[nodiscard]]:揭开忽略返回值后果的神秘面纱May 01, 2024 pm 06:18 PM

[[nodiscard]]属性指示函数的返回值不得忽略,否则将导致编译器警告或错误,以防止以下后果:未初始化异常、内存泄漏和错误的计算结果。

C++ 函数声明的详细语法:从语法解析到规范用法解析C++ 函数声明的详细语法:从语法解析到规范用法解析Apr 30, 2024 pm 02:54 PM

C++函数声明语法为:returnTypefunctionName(parameterType1parameterName1,...,parameterTypeNparameterNameN);,其中returnType为返回类型,functionName为函数名,parameterType为参数类型,parameterName为参数名,必须以分号结尾。

C++ 函数声明的逐步指南:涵盖每个步骤的详细说明C++ 函数声明的逐步指南:涵盖每个步骤的详细说明May 02, 2024 pm 04:33 PM

函数声明告诉编译器函数的存在,无需提供函数体。步骤如下:指定函数返回类型(void如果无返回值)定义函数名声明函数参数(可选,包括数据类型和标识符)加分号

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境