1. 程式人生 > >JS 語法之--函式,異常

JS 語法之--函式,異常

1、函式

  

2、函式表示式

  使用表示式定義函式,表示式中的函式名可以省略,如果這個函式名不省略,也只能用在此函式內部。

  測試:匿名函式 +   函式表示式

 1 // 匿名函式
 2 const add = function (x, y) {
 3     return x + y;
 4 };
 5 console.log(typeof(add)) // function
 6 console.log(add(4, 5))
 7 
 8 // 有名字的函式表示式
 9 const sub = function fn(x, y) {
10     return
x - y 11 } 12 13 console.log(sub(6, 9)) 14 // console.log(fn(4, 6))// 報錯,undefined ,不能再外面是使用 15 16 17 // 內部使用,就是自己呼叫自己,就是遞迴。 18 const sum = function _sum(n) { 19 if(n===1) return n;// 退出條件 20 return n + _sum(--n) 21 } 22 console.log(sum(4))

 

    函式,匿名函式,函式表示式的差異:

      函式和匿名函式,本質上都是一樣的,都是函式物件,只不過函式有自己的識別符號--函式名,匿名函式需要藉助其他的識別符號而已,

       區別在於,函式胡宣告提升,函式表示式不會

        

 

3、高階函式

  高階函式:函式作為引數或返回一個函式

  完成一個計數器:利用了閉包

    

  完成一個map函式,可以對某一個數組的元素進行某種處理。

    

  map的生成器實現.

    

      注

         

 

    計數器的生成器版本:

      

4、箭頭函式

  箭頭函式就是匿名函式,它是一種更加精簡的格式

  將上例中函式更改為箭頭函式:

  

  箭頭函式引數

  如果一個函式沒有引數,使用(): () => 3

  如果只有一個引數,引數列表可以省略小括號()

  多個引數,不能省略,且用逗號分隔

  

  箭頭函式返回值

  如果函式體部分有多行,就需要使用{} ,如果有返回值,使用return

  如果只有一行語句,可以同時省略大括號和return

  只要有return語句,就不能省略大括號

  如果只有一條非return 語句,加上大括號,函式就成了無返回值了

    如: console.log(map[1,2,3,4], x=> {x*2}))

    加上大括號,它就不等價 x => {return x*2}

    因此x => x*2 這種正確形式就行了

5、函式引數:

  普通引數

  一個引數佔一個位置,支援預設引數

    測試:

 1 const add = (x, y) => x + y
 2 console.log(add(4, 5)) // 9
 3 console.log('=====================')
 4 
 5 const add1 = (x, y=5) => x + y
 6 console.log(add1(4,6)) // 10
 7 console.log(add1(4)) // 9
 8 console.log('=====================')
 9 
10 const add2 = (x=6, y) => {console.log(x, y); return x + y}
11 console.log(add2())
12 console.log(add2(1))
13 console.log(add2(a=2,b=3)) // 在JS 中表達式是有值的,也就是 a=2 有兩個意思,a的值是2,此處表示式的值也是2
14 console.log('=====================')
15 
16 const add3 = (x=6, y) => x + y
17 console.log(add3(1,2,3,4,5,6,7))
18 console.log('=====================')
19 const add4 = (x=6,z, y=4) => x + y
20 console.log(add4(1,2,3,4,5,6,7))
21 
22 /**
23  * 在JS中沒有關鍵字傳參,
24  * JS 只是做引數位置的對應
25  * JS並不限制預設引數的位置 python中,關鍵字傳參只能在位置傳參之後)
26  * 傳入的引數多了,自動截斷
27  */

 

    結果:

Info: Start process (17:02:16)
9
=====================
10
9
=====================
6 undefined
NaN
1 undefined
NaN
2 3
5
=====================
3
=====================
4
Info: End process (17:02:17)

 

  可變引數(rest parameters 剩餘引數)

  JS 使用...  表示可變引數

    

  arguments 物件

    函式的所有引數會被儲存在一個arguments 的兼職對字典物件中

    

    ES6 之前,arguments 是唯一可變引數的實現

    ES6 開始,不推薦使用,建議使用可變引數,

    注:使用箭頭函式,取到的arguments 不是我們想要的

        

  引數解構

    

    

    JS 支援引數解構,不需要解構後的值個數,和引數個數對應

  函式返回值

      

    表示式的值:

    類C 的語言,都有一個概念, -------表示式的值

    賦值表示式的值:等號右邊的值

    逗號表示式的值 :類C 語言,都支援逗號表示式,逗號表示式的值,就是最後一個表示式的值

    JS 返回值依舊是一個值

  作用域:

    之前已經說明,但是注意一點,如何使用 “嚴格模式”

     最當前.js 檔案最上方 寫: use strict ,這樣 本指令碼中,只要出現 x = 3 隱式宣告,可能就會報錯 

      

 

6、異常:

  丟擲異常:

    JS 的異常語法和java 相同,使用throw 關鍵字丟擲

    使用throw 關鍵字可以丟擲任意物件的異常

    

    這點不同 Python,python只能跑Exceptions中的異常

  捕獲異常:

    try {} catch {} 異常捕獲語句

    try {} catch {} finally {} finally 最終會執行

    注意這裡的catch 不支援型別,也就是說至多一個catch 語句,可以在catch的語句塊內,自行處理異常

    這也是跟 python不同之處。