国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript初學者必看“箭頭函數”

tabalt / 953人閱讀

摘要:譯者按箭頭函數看上去只是語法的變動,其實也影響了的作用域。打開瀏覽器開發者控制臺,輸入我們將變量綁定到一個箭頭函數,該函數有一個參數返回。或者說箭頭函數不會改變本來的綁定。最后,結束刷屏的打印總結箭頭函數寫代碼擁有更加簡潔的語法不會綁定。

譯者按: 箭頭函數看上去只是語法的變動,其實也影響了this的作用域。

原文: JavaScript: Arrow Functions for Beginners

譯者: Fundebug

本文采用意譯,版權歸原作者所有

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

更簡潔的語法

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

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

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

var funcName = params => params + 2;
funcName(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);
// 4

double(3);
// 6

一行代碼搞定 BUG 監控:Fundebug

沒有局部this的綁定

和一般的函數不同,箭頭函數不會綁定this。 或者說箭頭函數不會改變this本來的綁定。
我們用一個例子來說明:

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

因為使用了關鍵字new構造,Counter()函數中的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, callapplysetInterval只是一個普通的函數。實際上setInterval里面的this綁定到全局對象的。我們可以通過將this打印出來驗證這一點:

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

你會發現,整個window對象被打印出來。 使用如下命令停止打印:

clearInterval(b.timer);

回到之前的函數,之所以打印NaN,是因為this.num綁定到window對象的num,而window.num未定義。

那么,我們如何解決這個問題呢?使用箭頭函數!使用箭頭函數就不會導致this被綁定到全局對象。

function Counter() {
    this.num = 0;
    this.timer = setInterval(() => {
        this.num++;
        console.log(this.num);
    }, 1000);
}
var b = new Counter();
// 1
// 2
// 3
// ...

通過Counter構造函數綁定的this將會被保留。在setInterval函數中,this依然指向我們新創建的b對象。

為了驗證剛剛的說法,我們可以將 Counter函數中的this綁定到that, 然后在setInterval中判斷thisthat是否相同。

function Counter() {
    var that = this;
    this.timer = setInterval(() => {
        console.log(this === that);
    }, 1000);
}
var b = new Counter();
// true
// true
// ...

正如我們期望的,打印值每次都是true。最后,結束刷屏的打印:

clearInterval(b.timer);
總結

箭頭函數寫代碼擁有更加簡潔的語法;

不會綁定this

關于Fundebug

Fundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java線上應用實時BUG監控。 自從2016年雙十一正式上線,Fundebug累計處理了10億+錯誤事件,付費客戶有Google、360、金山軟件、百姓網等眾多品牌企業。歡迎大家免費試用!

版權聲明

轉載時請注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/05/25/arrow-function-for-beginner/

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83318.html

相關文章

  • JavaScript學者必看“this”

    摘要:因為關鍵字沒有處于一個聲明的對象內部,默認指向全局對象。這一點可能對于大部分初學者來說有點難以理解。函數會返回一個函數,并且將綁定好。自從年雙十一正式上線,累計處理了億錯誤事件,得到了金山軟件百姓網等眾多知名用戶的認可。 譯者按: JavaScript的this和Java等面向對象語言中的this大不一樣,bind()、call()和apply()函數更是將this的靈活度進一步延伸。...

    BlackMass 評論0 收藏0
  • JavaScript中8個常見的陷阱

    摘要:然而,不會在年的基礎上加,而只是表示年。閉包這是一個經典的面試題雖然期望輸出,然而實際上卻不會。因為第行的沒有在正確的環境下執行。 譯者按: 漫漫編程路,總有一些坑讓你淚流滿面。 原文: Who said javascript was easy ? 譯者: Fundebug 為了保證可讀性,本文采用意譯而非直譯。另外,本文版權歸原作者所有,翻譯僅用于學習。 這里我們針對JavaScri...

    doodlewind 評論0 收藏0
  • JavaScript數組去重—ES6的兩種方式

    摘要:數組的方法方法創建一個新的數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素。可選,執行函數時的值。刪除所有的鍵值對,沒有返回值。返回一個布爾值,表示某個鍵是否在當前對象之中。 說明 JavaScript數組去重這個問題,經常出現在面試題中,以前也寫過一篇數組去重的文章,(JavaScript 數組去重的多種方法原理詳解)但感覺代碼還是有點不夠簡單,今天和大家再說兩種方法,代碼...

    FrancisSoung 評論0 收藏0
  • JavaScript數組去重—ES6的兩種方式

    摘要:數組的方法方法創建一個新的數組,新數組中的元素是通過檢查指定數組中符合條件的所有元素。可選,執行函數時的值。刪除所有的鍵值對,沒有返回值。返回一個布爾值,表示某個鍵是否在當前對象之中。 說明 JavaScript數組去重這個問題,經常出現在面試題中,以前也寫過一篇數組去重的文章,(JavaScript 數組去重的多種方法原理詳解)但感覺代碼還是有點不夠簡單,今天和大家再說兩種方法,代碼...

    lijinke666 評論0 收藏0

發表評論

0條評論

tabalt

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<