国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

ES6中的箭頭函數實例詳解

2019-11-19 16:54:57
字體:
來源:轉載
供稿:網友

本文實例講述了ES6中的箭頭函數。分享給大家供大家參考,具體如下:

語法

我們先來看看箭頭函數的語法:

([param] [, param]) => {  statements}param => expression

param 是參數,根據參數個數不同,分這幾種情況:

() => { … } // 零個參數用 () 表示;x => { … } // 一個參數可以省略 ();(x, y) => { … } // 多參數不能省略 ();

示例

我們再來看看一些示例,看看在ES5中的函數怎么通過ES6中的箭頭函數來替代吧:

// ES5var selected = allJobs.filter(function (job) { return job.isSelected();});// ES6var selected = allJobs.filter(job => job.isSelected());

當然,也可以定義多個參數:

// ES5var total = values.reduce(function (a, b) { return a + b;}, 0);// ES6var total = values.reduce((a, b) => a + b, 0);

當然=>后面也不一定非得接return 之后的語句,看下面:

// ES5$("#confetti-btn").click(function (event) { playTrumpet(); fireConfettiCannon();});// ES6$("#confetti-btn").click(event => { playTrumpet(); fireConfettiCannon();});

但是需要注意的是,多行語句需要用{}括起來,單行表達式不需要{},并且會作為函數返回值。

x => { return x * x }; // 函數返回 x * xx => x * x; // 同上一行x => return x * x; // SyntaxError 報錯,不能省略 {}x => { x * x }; // 合法,沒有定義返回值,返回 undefined

和普通函數一樣,箭頭函數也可以使用剩余參數和默認參數

var func1 = (x = 1, y = 2) => x + y;func1(); // 得到 3var func2 = (x, ...args) => { console.log(args) };func2(1,2,3); // 輸出 [2, 3]

特性

介紹完了箭頭表達式的語法和示例,我們就需要思考一下了。如果箭頭表達式僅僅就是簡化了函數的命名,我們為什么要改變原來的習慣而去使用它呢?所以我們需要了解一下箭頭函數的特性。

箭頭函數內部沒有constructor方法,也沒有prototype,所以不支持new操作。但是它對this的處理與一般的普通函數不一樣。箭頭函數的 this 始終指向函數定義時的 this,而非執行時。我們通過一個例子來理解:

var o = {  x : 1,  func : function() { console.log(this.x) },  test : function() {    setTimeout(function() {      this.func();    }, 100);  }};o.test(); // TypeError : this.func is not a function

上面的代碼會出現錯誤,因為this的指向從o變為了全局(函數調用中的this都是指向全局的)。如果大家對JavaScript中的this不是很熟悉的話,可以看看前面的一篇文章《javascript中this的用法實例詳解》。好了,回歸正題,我們需要修改上面的代碼如下:

var o = {  x : 1,  func : function() { console.log(this.x) },  test : function() {    var _this = this;    setTimeout(function() {      _this.func();    }, 100);  }};o.test();

通過使用外部事先保存的this就行了。這里就可以利用到箭頭函數了,我們剛才說過,箭頭函數的 this 始終指向函數定義時的 this,而非執行時。所以我們將上面的代碼修改如下:

var o = {  x : 1,  func : function() { console.log(this.x) },  test : function() {    setTimeout(() => { this.func() }, 100);  }};o.test();

這回this就指向o了。

我們還需要注意一點的就是這個this是不會改變指向對象的,我們知道call和apply可以改變this的指向,但是在箭頭函數中是無效的。

var x = 1,  o = {    x : 10,    test : () => this.x  };o.test(); // 1o.test.call(o); // 依然是1

希望本文所述對大家ECMAScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 白朗县| 白玉县| 卓尼县| 洛南县| 远安县| 普洱| 新源县| 凤翔县| 宁都县| 揭东县| 桐庐县| 邵东县| 马尔康县| 民丰县| 富顺县| 仙游县| 通辽市| 常州市| 社会| 阜新| 武城县| 镇原县| 琼海市| 乌苏市| 高阳县| 镇平县| 陇西县| 贵德县| 慈溪市| 甘南县| 阳山县| 宜州市| 武胜县| 景洪市| 涿鹿县| 精河县| 隆回县| 武威市| 柘荣县| 读书| 南阳市|