2017-09-26 31 views
0

我試圖用一些JavaScript代碼進行實驗。我不確定爲什麼ES6語法失敗。Arrow語法VS ES5函數範圍

String.prototype.spacify = function() { 
 
    console.log(this.split('').join(' ')); 
 
} 
 

 
'hello world'.spacify();

^^這個偉大的工程! 但是,當我做到這一點

String.prototype.spacify =() => { 
 
    console.log(this.split('').join(' ')); 
 
} 
 

 
'hello world'.spacify();

當我轉換的功能Arrow功能,我得到this.split沒有定義。我不明白。箭頭語法是否與範圍界限做了特別的事情?

請指教!

+0

阿谷歌揭示了許多發生在'this' https://derickbailey.com/2015/09/28/do -es6-arrow-functions-really-solve-this-in-javascript/ – mplungjan

回答

0

在箭頭函數中,範圍不會更改。

含義:

const globalThis = this; 

String.prototype.spacify =() => { 
    // this === globalThis 
    ... 
} 
+0

這不太對。範圍和「this」有關但不一樣。當然箭頭函數也有其自己的範圍,就像任何其他函數一樣。 –

+0

@FelixKling有趣的,你可以詳細一點嗎? –

2

arrow functionthis的上下文中是指外this。這裏的功能testthis等於箭頭函數中的this

箭頭功能不會創建它自己的範圍內,它只是需要外背景

function test() { 


    String.prototype.spacify =() => { 
     console.log(this.split('').join(' ')); 
    } 

}