1. 基本概念
1.1 語句作用
return語句用於終止一個函數的執行,同時將一個返回值返回給這個函數的調用者。因此,return語句必須要被包含在函數之中;否則,程序就會出錯。如果沒有為return語句指明它的返回值,那麼它就默認返回undefined。
如果一個函數中沒有顯式的寫明return語句,那麼在函數執行時JavaScript會在該函數執行流程的末尾自動添加一條未指明返回值的return語句。return語句也可以被添加在函數的前面部分,這通常用於當滿足某個條件時而提前退出函數。
1.2 語法結構
return語句的語法結構如下所示:
<code>return [expression];/<code>
其中expression可以是JavaScript中任意合法的表達式,它的計算結果就是return語句的返回值,在函數終止的時候會被返回給該函數的調用者。如果省略了expression,那麼return語句的返回值就默認為undefined。
如果要顯式指明expression,那麼它和return關鍵字必須寫在同一行上,即它們之間不能有換行符。否則,JavaScript會自動在return關鍵字的後面添加分號。此時,該return語句其實是一個未指明返回值的return語句,而expression
在return語句之後永遠都不會被執行到。2. 示例
2.1 指明返回值
<code>/<code>
以上代碼的執行結果如下圖所示。我們用實參9調用函數twice(),它先計算9的兩倍然後再返回該結果,隨後該返回值被賦值給了變量value1。第10行的代碼打印出value1的值,可以看到它的值確實為18。
該示例中的twice()函數還可以簡寫為下面的形式,即計算兩倍的表達式被包含在return語句中,它的結果被直接返回。這樣就不需要先聲明一個變量臨時保存計算結果,再用return語句返回該變量。
<code>/<code>
2.2 省略返回值
<code>/<code>
從下圖的執行結果中我們可以看到,首先打印出了字符串"執行函數abc().",說明函數abc()確實被執行了。第10行的代碼打印出的變量value2的值為undefined,這正是return語句的默認返回值。
2.3 省略return語句
<code>/<code>
下圖中的執行結果表明,該示例和上一個例子的執行結果完全一致(除了變量被命名為value3之外)。該例子的成功執行表明,當一個函數的執行流程的最後一條語句是沒有顯式指定返回值的return語句時,該return語句可以被省略。
當一個函數的執行流程的最後缺少return語句的時候,JavaScript會自動在該執行流程的最後添加一條沒有返回值的return語句,當然該函數的返回值就為undefined
了。2.4 return語句不能在函數之外
<code>/<code>
以上代碼的執行結果如下圖所示,我們可以看到瀏覽器明確指出第3行的return語句是錯誤的。
2.5 提前終止函數
return語句不一定非要是函數的最後一條語句,它也可以處於函數的前面或中間,用於提前終止函數的執行。示例代碼如下所示:
<code>/<code>
我們使用實參0調用函數opposite(),當實參為0的時候,會執行if語句中的代碼。它首先打印字符串"0的相反數是它自身。",然後遇到語句return 0;。這條return語句提前終止函數的執行,並返回0。因此,if語句後面的那一條打印語句和return -x;均不會被執行。下圖中的執行結果正印證了這一執行流程。
這個例子也說明了一個函數可以包含多個return語句,用於根據不同的情況而退出函數。
2.6 自動添加分號
<code>/<code>
該示例的執行結果如下圖所示,可以看到第11行打印出的變量value5的值為undefined,而不是我們原本期望的數字18。這是怎麼回事呢?
這個示例和第一個例子唯一的不同就是我們把return語句拆成了兩行,return關鍵字和它的返回值result被寫在了不同的行上。在其它編程語言或者JavaScript的某些其它語句中,這樣的拆行不會對原程序有任何影響。
但JavaScript的return語句是個例外,在本文的開頭我們就說過如果return關鍵字和它的返回值之間有換行符的話,JavaScript會自動在return關鍵字之後插入一個分號,此時該return語句的意義就和我們所期望的不同了。
這樣自動插入分號的結果就會讓該示例中的twice()函數實際等同於下面的代碼。此時無論傳遞的參數是多少,return語句都會提前終止函數並默認返回undefined,而變量result始終都不會被返回。
<code>/<code>
如果你真的想要將return語句寫在多行上,那麼你可以將返回值用括號括起來。但請一定要注意,此時左括號也必須要和return關鍵字寫在同一行上,就像下面的代碼這樣:
<code>/<code>
(完)
閱讀更多 青石野草 的文章
關鍵字: 語句 JavaScript