js 表達式與語句

引子:表達式和語句很基礎,可是有時會犯錯,好比:git

function(){}//報錯
(function(){})//不報錯
function f(x){ return x + 1 }()//報錯
function f(x){ return x + 1 }(1)//不報錯,爲何返回 1

能明白爲何?github

解釋:express

第一行代碼:由於JavaScript 將 function 關鍵字看成一個 函數聲明語句 的開始,而函數聲明語句 function 關鍵字後面應該是 函數名,這裏後面跟圓括號,固然會報錯。數組

第二行代碼:給它加上一對圓括號,解析器會把()裏的當作表達式去解析,在這裏就會當作匿名函數表達式解析,因此不會報錯。函數

第三行代碼:在一條語句後面加上()會被當作分組操做符,分組操做符裏必需要有表達式,因此這裏報錯;spa

第四行代碼:在一條函數聲明語句後面加上(1),僅僅是至關於在聲明語句以後又跟了一條毫無關係的表達式,等價於下面代碼:設計

function f(x){ return x + 1 }
(1)//1

因此返回了可有可無的答案;code

看來基礎仍是要看看的,下面甩定義:對象

表達式(expression):blog

js 中的一個短語,js 解釋器會將其計算出一個結果。程序中的常量是最簡單的一類表達式。

變量名也是一種簡單的表達式,它的值就是賦值給變量的值。
複雜表達式是由簡單表達式組成的。

好比,數據訪問表達式是由一個表示數組的表達式、左方括號、一個整數表達式和右方括號構成。它們所組成的新的表達式的運算結果是該數組的特定位置的元素值。

一樣的,函數調用表達式由一個表示函數對象的表達式和0個或多個參數表達式構成。

將簡單表達式組合成複雜表達式最經常使用的方法就是使用運算符(opetator)。

運算符按照特定的運算規則對操做數(一般是兩個)進行運算,並計算出新值。

乘法運算符「*」是比較簡單的例子。表達式x*y是對兩個變量表達式x和y進行運算並得出結果。有時咱們更願意說運算符返回了一個值而不是「計算」出了一個值。

書上目錄截圖:

image

語句(statement):

js 整句或命令。js 語句是以分號結束;表達式計算出一個值,但語句用來自行以使某件事發生。
「使某件事發生」的一個方法是計算帶有反作用的表達式。

諸如賦值和函數調用這些有反作用的表達式,是能夠做爲單獨的語句的,這種把表達式當作語句的用法也稱做表達式語句(expression statement)。相似的語句還有聲明語句(declaration statement),聲明語句用來聲明新變量或定義新函數。

書上目錄截圖:

image

參考資料:

JavaScript高級程序設計-第3版-中

JavaScript權威指南-第6版-中

相關文章
相關標籤/搜索