JavaScript——表達式與語句

表達方式

表達式產生一個值,并且可以在需要該值的任何地方編寫該表達式,例如,將其作為函數調用中的參數或賦值的右側。以下各行包含一個表達式:

myvar

3 + x

myfunc('a', 'b')

陳述

大致上,一條語句執行一個動作。循環和if語句是語句的示例。程序基本上是一系列語句。[ 8 ]

無論JavaScript希望在哪里聲明,您都可以編寫表達式。這樣的語句稱為表達式語句。相反的情況并不成立:您無法在JavaScript需要表達式的地方編寫語句。例如,一條if語句不能成為函數的參數。

條件語句與條件表達式

區別 如果我們看一下兩個相似的語法類別的成員:if語句和條件運算符(一個表達式),則語句和表達式之間的關系會變得更加清晰。

以下是一個語句示例:if

var salutation;

if (male) {

? ? salutation = 'Mr.';

} else {

? ? salutation = 'Mrs.';

}

有類似的一種 表示條件運算符。前面的語句等效于以下代碼:

var salutation = (male ? 'Mr.' : 'Mrs.');

等號和分號之間的代碼是一個表達式。括號不是必需的,但是如果我將其放在括號中,我發現條件運算符更容易閱讀。

使用歧義表達式作為語句

二 各種表達形式看起來像語句,它們在句法類別方面是模棱兩可的:

對象文字(表達式)看起來像塊(語句):

{

? ? foo: bar(3, 5)

}

前面的構造可以是對象文字(詳細信息:Object Literals)或塊,后跟標簽foo:,后跟函數調用bar(3, 5)。

命名函數表達式類似于函數聲明(語句):

function foo() { }

前面的構造是命名函數表達式或函數聲明。前者產生一個函數,后者產生一個變量并為其分配一個函數(有關這兩種函數定義的詳細信息:定義函數)。

為了防止在解析過程中產生歧義,JavaScript不允許您將對象文字和函數表達式用作語句。也就是說,表達式語句不能以以下內容開頭:

大括號

關鍵字 function

如果表達式以這些標記中的任何一個開頭,則它只能出現在表達式上下文中。您可以通過例如在表達式兩邊加上括號來遵守該要求。接下來,我們將看兩個必要的示例。

通過eval()評估對象文字

eval 解析其參數 陳述語境。如果要eval返回對象,則必須在對象文字周圍加上括號:

> eval('{foo:123}')

123

> eval('({{foo:123})')

{foo:123}

立即調用函數表達式

下列代碼是立即調用的函數表達式(IIFE),該函數的主體會立即執行(您將了解IIFE在通過IIFE引入新作用域中的用途):

>(function(){return'abc'}())

'abc'

如果省略括號,則會出現語法錯誤,因為JavaScript會看到一個不能為匿名的函數聲明:

>函數(){返回'abc'}()

SyntaxError:函數語句需要一個名稱

如果添加名稱,還會收到語法錯誤,因為無法立即調用函數聲明:

>函數foo(){返回'abc'}()

SyntaxError:意外令牌)

函數聲明之后的內容必須是法律聲明,()而不是。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容