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

首頁 > 語言 > JavaScript > 正文

JavaScript箭頭(arrow)函數詳解

2024-05-06 15:16:23
字體:
來源:轉載
供稿:網友

為了保證可讀性,本文采用意譯而非直譯。另外,本文版權歸原作者所有,翻譯僅用于學習。

本文我們介紹箭頭(arrow)函數的優點。

更簡潔的語法

我們先來按常規語法定義函數:

function funcName(params) {  return params + 2; }funcName(2);// 4

該函數使用箭頭函數可以使用僅僅一行代碼搞定!

var funcName = (params) => params + 2funcName(2);// 4

是不是很酷!雖然是一個極端簡潔的例子,但是很好的表述了箭頭函數在寫代碼時的優勢。我們來深入了解箭頭函數的語法:
(parameters) => { statements }

如果沒有參數,那么可以進一步簡化:
() => { statements }

如果只有一個參數,可以省略括號:
parameters => { statements }

如果返回值僅僅只有一個表達式(expression), 還可以省略大括號:
parameters => expression

// 等價于:function (parameters){ return expression;}

現在你已經學會了箭頭函數的語法,我們來實戰一下。打開Chrome瀏覽器開發者控制臺,輸入:
var double = num => num * 2

我們將變量 double 綁定到一個箭頭函數,該函數有一個參數 num , 返回 num * 2 。 調用該函數:

double(2);// 4double(3);// 6

沒有局部 this 的綁定

和一般的函數不同,箭頭函數不會綁定 this 。 或則說箭頭函數不會改變 this 本來的綁定。

我們用一個例子來說明:

function Counter() { this.num = 0;}var a = new Counter();

因為使用了關鍵字 new 構造,Count()函數中的 this 綁定到一個新的對象,并且賦值給 a 。通過 console.log 打印

a.num ,會輸出0。 console.log(a.num);// 0

如果我們想每過一秒將 a.num 的值加1,該如何實現呢?可以使用 setInterval() 函數。

function Counter() { this.num = 0; this.timer = setInterval(function add() {  this.num++;  console.log(this.num); }, 1000);}

我們來看一下輸出結果:

var b = new Counter();// NaN// NaN// NaN// ...

你會發現,每隔一秒都會有一個 NaN 打印出來,而不是累加的數字。到底哪里錯了呢?

首先使用如下語句停止 setInterval 函數的連續執行:
clearInterval(b.timer);

我們來嘗試理解為什么出錯:根據上一篇博客講解的規則,首先函數 setInterval 沒有被某個聲明的對象調用,也沒有使用 new 關鍵字,再之沒有使用 bind , call 和 apply 。 setInterval 只是一個普通的函數。實際上 setInterval 里面的 this 綁定到全局對象的。我們可以通過將 this 打印出來驗證這一點:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 三门峡市| 巨野县| 内乡县| 云龙县| 建平县| 广平县| 十堰市| 阿克陶县| 延长县| 东乡| 阳朔县| 德保县| 博乐市| 宿州市| 集安市| 科尔| 双城市| 曲沃县| 海淀区| 仲巴县| 北宁市| 三明市| 上犹县| 平乐县| 龙南县| 日土县| 万宁市| 仁化县| 宁都县| 乐都县| 四会市| 永吉县| 黄陵县| 汝阳县| 水富县| 罗城| 宣武区| 江永县| 台山市| 保定市| 秦安县|