× 目錄 [1]表達式 [2]塊語句 [3]空語句[4]聲明 前面的話 如果表達式在javascript中是短語,那麼語句(statement)就是javascript整句或命令。表達式計算出一個值,語句用來執行以使某件事發生。javascript程式無非就是一系列可執行語句的集合,javascri ...
×
目錄
[1]表達式 [2]塊語句 [3]空語句[4]聲明前面的話
如果表達式在javascript中是短語,那麼語句(statement)就是javascript整句或命令。表達式計算出一個值,語句用來執行以使某件事發生。javascript程式無非就是一系列可執行語句的集合,javascript解釋器依照語句的編寫順序依次執行。本文將介紹javascript語句中的四類語句——表達式語句、塊語句、空語句和聲明語句
表達式語句
表達式語句(expression statement)是javascript中最簡單的語句,賦值、delete、函數調用這三類既是表達式,又是語句,所以叫做表達式語句
//賦值語句 greeting = 'hello ' + name; i* = 3; //遞增運算符(++)和遞減運算符(--)和賦值語句有關,它們的作用是改變一個變數的值,就像執行一條賦值語句一樣 counter++; //delete運算符 delete o.x; //函數調用 alert(greeting); window.close(); cs = Math.cos(x);
javascript語句以分號結束,但表達式不需要分號結尾。一旦在表達式後面添加分號,則JavaScript引擎就將表達式視為語句,這樣會產生一些沒有任何意義的語句(表達式語句除外)
1 + 3;
'abc';
塊語句
塊語句又叫複合語句,javascript將多條語句聯合在一起,形成一條複合語句(compound statement)
複合語句只須用花括弧將多條語句括起來即可
{ x = Math.PI; cx = Math.cos(x); console.log(cx); }
關於塊語句,有以下幾點註意事項:
【1】語句塊的結尾不需要分號。塊中的原始語句必須以分號結束,但語句塊不需要
【2】語句塊中的行都有縮進,這不是必須的,但整齊的縮進能讓代碼可讀性更強,更容易理解
【3】javascript中沒有塊級作用域,在語句塊中聲明的變數並不是語句塊私有的(不包括es6)
{ var i = 0; console.log(i++);//0 } console.log(i++);//1
空語句
在javascript中,當希望多條語句被當做一條語句使用時,使用複合語句來替代。空語句(empty statement)則恰好相反,它允許包含0條語句
;
javascript解釋器執行空語句時不會執行任何動作。但當創建一個具有空迴圈體的迴圈時,空語句是有用的
在這個迴圈中,所有的操作都在表達式a[i++]=0中完成,這裡並不需要任何迴圈體。然而javascript需要迴圈體中至少包含一條語句,因此,這裡只使用了一個單獨的分號來表示一條空語句
//初始化一個數組a for(i = 0; i < a.length; a[i++] = 0);
在for、while迴圈或if語句的右圓括弧後的分號很不起眼,這可能造成一些bug,而這些bug很難定位到
//因為;的多餘,造成與預想不同的結果 if((a == 0) || (b == 0)); o = null;
如果有特殊目的需要使用空語句,最好在代碼中添加註釋,這樣可以更清楚地說明這條空語句是有用的
for(i = 0; i < a.length; a[i++] = 0)/*empty*/;
聲明語句
聲明語句包括變數聲明和函數聲明,分別使用var和function關鍵字
var語句用來聲明一個或者多個變數,關鍵字var之後跟隨的是要聲明的變數列表,列表中的每一個變數都可以帶有初始化表達式,用於指定它的初始值
var name_1 [ = value_1] [,...,name_n[=value_n]]
var i ; var j = 0; var p,q; var x = 2, y = r;
關鍵字function用來定義函數,funcname是要聲明的函數的名稱的標識符,函數名之後的圓括弧中是參數列表,參數之間使用逗號分隔。當調用函數時,這些標識符則指代傳入函數的實參
函數體是由javascript語句組成的,語句的數量不限,且用花括弧括起來。在定義函數時,並不執行函數體內的語句,它和調用函數時待執行的新函數對象相關聯
function funcname([arg1 [,arg2 [...,argn]]]){statement}
function語句里的花括弧是必需的,這和while迴圈和其他一些語句所使用的語句塊是不同的,即使函數體內只包含一條語句,仍然必須使用花括弧將其括起來
//正確 function hypotenuse(x,y){ return Math.sqrt(x*x + y*y); } //錯誤 function hypotenuse(x,y) return Math.sqrt(x*x + y*y);
函數聲明語句和函數定義表達式包含相同的函數名,但二者有所不同
//表達式 var f = function(x){return x+1;} //語句 function f(x){return x+1;}
函數定義表達式只有變數聲明提前了,變數的初始化代碼仍然在原來的位置;而函數聲明語句的函數名稱和函數體均提前,腳本中的所有函數和函數中所有嵌套的函數都會在當前上下文中其他代碼之前聲明,也就是說,可以在聲明一個javascript函數之前調用它
console.log(f1(0));//Uncaught TypeError: f1 is not a function var f1 = function(x){return x+1;} console.log(f2(0));//1 function f2(x){return x+1;}
變數聲明語句和函數聲明語句有幾點相似之處
【1】變數聲明語句和函數聲明語句都會提前
console.log(a);//undefined var a = 0; console.log(a);//0 console.log(f(0));//1 function f(x){return x+1;} console.log(f(0));//1
【2】變數聲明語句和函數聲明語句創建的變數都無法刪除
var a = 0; delete a; console.log(a); function f(x){return x+1;} delete f; console.log(f(0));//1
參考資料
【1】 ES5/語句 https://www.w3.org/html/ig/zh/wiki/ES5/statements
【2】 阮一峰Javascript標準參考教程——語法概述 http://javascript.ruanyifeng.com/grammar/basic.html#toc12
【3】《javascript權威指南(第6版)》第5章 語句