91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

es6函數的擴展示例

發布時間:2020-12-02 14:00:52 來源:億速云 閱讀:141 作者:小新 欄目:web開發

小編給大家分享一下es6函數的擴展示例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

本篇文章給大家帶來的內容是關于es6函數的擴展介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

函數參數的默認值

我們都知道聲明函數可以設置形參,但你有沒有想過形參也可以直接設置默認值,我們接下來看看如何去寫

代碼

function f(x,y=2) {
    return x+y
}
console.log(f(2)) // 4

上面的小例子只是設置了一個y的默認值2,然后我們使用這個函數的時候,只傳遞了x的參數2,所以我們會得到4,如果我們給y傳遞參數1呢?我們會得到什么樣的結果,繼續看下面的例子

function f(x,y=2) {
    return x+y
}
console.log(f(2,1)) // 3

我們會得到3,因為你傳遞實參的話會替換默認值,更多的例子需要大家自己去實驗!!!

function f(x,x,y=2) {
    return x+y
}
console.log(f(2,2, 1)) // 報錯

上面的例子會報錯,因為我們不能設置相同的參數

let x = 3
function f(x,y=x) {
    return x+y
}
console.log(f(2))

var x = 3
function f(x,y=x) {
    return x+y
}
console.log(f(2))

function f(x,y=x) {
    console.log(x,y) // 2 2
    var x = 3
    console.log(x,y) // 3 2
    return x+y
}
console.log(f(2)) // 5

上面三個例子是函數參數作用域的例子,我們來看一下第一個和第二個例子函數默認值會有一個自己單獨的作用域,所以我們在外面聲明修改的x是不會起作用的,但是第三個例子我們在函數內部修改x,我們可以看一看我們打印的值可以看的未聲明之前我們的x,y都是2,這里沒有變量提升,聲明下面x則變成了3,y依舊不變,所以得到5

rest 參數

官方注解:ES6 引入 rest 參數(形式為...變量名),用于獲取函數的多余參數,這樣就不需要使用arguments對象了。rest 參數搭配的變量是一個數組,該變量將多余的參數放入數組中

代碼

function f(...x) {
    console.log(x) // [1,2,3]
}
f(1,2,3)

上面的例子我們會得到一個數組,這正和它定義的一樣它會把多余的變量一起放到一個數組里面

function f(arr,y,...x) {
    console.log(x)
}

function f(arr,...x,y) {
}

上面的兩個例子第一個可以執行并可以得到自己想要的結果,第二個則會執行報錯,因為rest參數只能放到最后一個參數位置使用

嚴格模式下rest如何去使用?

從Es5開始函數內已經可以定義嚴格模式了,但Es6規定函數參數默認值定義嚴格模式會報錯,但也要看嚴格模式定義在局部還是全局

嚴格模式不懂的可以去看看了解
嚴格模式

代碼

 function fn(a=5) {
   'use strict';
   console.log(a)
   }
   fn()

上面這個例子我們在函數內部設置了嚴格模式但是它并沒有我們如期的那樣返回結果,而是報錯了。我們來看一看官方解釋:函數內部的嚴格模式,同時適用于函數體和函數參數。但是,函數執行的時候,先執行函數參數,然后再執行函數體。也就是說在函數內部定義嚴格模式,函數參數是先執行的函數體后執行(不定義嚴格模式也是先執行函數參數),這樣在函數體驗證參數是否為嚴格模式則為不合理存在

那我們該怎么避免這樣的錯誤呢?
 代碼

   'use strict';
   function fn2(a=5) {
       console.log(a)
   }
   fn2()
   
    function fn() {
   'use strict';
       return function (a=5) {
           console.log(5)
       }
   }
   fn()() // 5

我們可以在全局定義嚴格模式,或是在一個函數內部定義然后返回一個帶參數的函數,這樣就可以繞過執行函數參數,執行函數體的時候不會報錯

name 屬性

 官方注解: 函數的name屬性,返回該函數的函數名  使用方式   函數名.name

代碼

function a() {
}
console.log(a.name) // a

function b() {
}
console.log(b.name) // a

上面兩個例子通過使用name屬性我們會得到函數的名字,當然Es5也能使用,大家可以去嘗試在Es6環境和Es5環境測試一下

箭頭函數

  let fn = a => a
  console.log(fn(10)) // 10
  
  // 對比
  
  let fn1 = function (a) {
      return a
  }
  console.log(fn1(10)) //10
  
  let fn2 =  (a,b) => a+b
  console.log(fn2(1,2))
  
  // 對比
  
  let fn21 = function (a,b) {
      return a+b
  }
  console.log(fn2(1,2))

我們可以看看上面的箭頭函數與Es5中我們常用書寫的函數的區別,就是大大縮減英文字母的編寫而且變得更簡潔了,其實箭頭函數和普通函數作用都差不多,而且簡單易懂,可以相互嵌套,對于自己代碼整潔度非常有幫主,鼓勵大家多使用箭頭函數,那么箭頭函數也有幾個注意點需要大家記住

  1. 函數體內的this對象,就是定義時所在的對象,而不是使用時所在的對象(this指向固定)
  2. 不可以當作構造函數,也就是說,不可以使用new命令,否則會拋出一個錯誤
  3. 不可以使用arguments對象,該對象在函數體內不存在。如果要用,可以用 rest 參數代替
  4. 不可以使用yield命令,因此箭頭函數不能用作 Generator 函數(這個函數到最后咱們會提到這里看看就行)

尾調用

 通俗的解釋:就是在函數中最后一步調用函數

代碼

  let fn = () => {
  console.log(123)
  return () => 5
  }
  console.log(fn()()) // 123     5

尾遞歸

let fn = (a,b) => {
  if(a===b) return b
  console.log(1)
  return fn(a+1, b)
  }
  console.log(fn(1,5))

在函數內部最后一步進行遞歸調用本身,從而達到遞歸的效果

函數參數的尾逗號

Es7中允許函數形參最后一個帶有逗號,以前都是不允許帶有逗號的
  let fn = (a,) => {
      console.log(a)
  }
  fn(1)

上面一個例子我們在參數的后面加了一個逗號,執行結果之后發現可以正常運行,但是我在es6環境下也是不會報錯的試了下es5也不報錯,大家可以在去試試、

函數的擴展就到這里了,最主要需要我們學的就是箭頭函和rest參數傳值,以及嚴格模式下函數的運作

以上是“es6函數的擴展示例”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浦县| 安塞县| 巴南区| 崇明县| 诸暨市| 桦川县| 萍乡市| 洞口县| 辽阳县| 黔东| 屏东县| 龙州县| 大田县| 万山特区| 陈巴尔虎旗| 苗栗县| 石狮市| 华阴市| 滦平县| 肥东县| 桑植县| 涪陵区| 凤山县| 泰宁县| 巴里| 中西区| 吉林市| 肇东市| 九龙城区| 平南县| 北碚区| 土默特左旗| 容城县| 乐山市| 尼木县| 亳州市| 瓦房店市| 宜兰县| 建宁县| 阳东县| 玉溪市|