javascript語句——表達式語句、塊語句、空語句和聲明語句

来源:http://www.cnblogs.com/xiaohuochai/archive/2016/07/15/5672887.html
-Advertisement-
Play Games

× 目錄 [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章 語句


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上一篇僅僅考慮了純文本的情況,現在,來探討一下圖像。 首先,請看如下代碼: 其效果圖是這樣的: 可以看到,圖像的下邊緣依然有一些背景顏色,極其影響頁面的美觀,那麼,這些紅色背景是怎麼來的呢? 如果我們改變line-height的值,會發現圖像下邊緣的紅色背景區域也會跟著變化,比如將line-heig ...
  • 一、浮動(float)對內聯元素的影響。 1.我們都知道,內聯元素(例如:span/img/input...)在正常情況下不可以對其設置寬高的,它的大小之只和它內部內容的多少有關。 我們怎樣才可以對其設置寬、高呢?可以用display:block;或者display:inline-block;讓它轉 ...
  • 源代碼如下: <!DOCTYPE html><html><head> <title>xi</title> <meta charset="utf-8"> <style type="text/css"> .ww{ width: 70px; height: 70px; background: red; b ...
  • 1. rem單位方式,用法當前像素除以100。 2. px單位方式,以640px設計圖比例實現。 3.px單位方式,以設計圖640除以2實現。 4.px單位方式及media媒體查詢方式實現,判斷最大、最小方式實現,設計圖還是640標準。 註,第一種、二種方式是現在比較好用的 ...
  • 一、line-height的定義 line-height,行高,是指文本行基線間的垂直距離。 1. 什麼是基線? 一般而言,一個文本行一共有四條線,從上到下依次為頂線、中線、基線、底線;在英文中,基線為小寫 x 字母下邊緣所在的那條線。如圖: 註意,基線的位置與字體有關,不同的字體基線的位置有偏差。 ...
  • HTML可以看成是由節點(node)組成的樹結構 我們一般都是在<p>節點裡面寫字元串。 在上圖中,<p>節點和字元串之間有一個text, 這個text就是文本節點。 我們可以這樣創建文本節點 document.createTextNode(String); 我們也可以把他添加到<p>節點 var ...
  • 做的一個項目中需要得到經緯度.. 實現:先寫一個方法如下 在直接用就可以了 第一個參數是地名,第二個參數是城市名,第三個是你想在哪個文本框顯示...就可以得到文本框的值也就是該地名.. 最後就是取文本框的值,如果不想看到這個文本框,可以隱藏,同樣可以取到值 ...
  • (?:pattern) 匹配 pattern 但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以後使用。這在使用 "或" 字元 (|) 來組合一個模式的各個部分是很有用。例如, 'industr(?:y|ies) 就是一個比 'industry|industries' 更簡略的表達式。 ( ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...