2016-07-22 57 views
1

我一直在使用一個新的方法,我只是瞭解到保持外部作用域內的另一個函數,但我不記得使用的語法的術語。下面是它如何工作的例子:沒有函數文本的函數的javascript語法的名稱或術語?

Api.get().then((data) => { 
    console.log('do something with data', data); 
}, (e) { 
    console.log('Error: ', e); 
}); 

基本上,它是一個回調函數,但是這是什麼類型的語法的術語或名稱。我喜歡使用它的原因是因爲您仍然可以參考this及其值和方法,而使用function(data)會丟失this上下文。我想知道這個語法的名稱或術語,因爲它似乎不被iphone或safari支持,我希望進一步查看支持和文檔以支持此方法。

+0

箭頭功能... – 2016-07-22 05:09:29

+0

它是第一個箭頭功能。第二個是語法錯誤。你需要'(e)=> {}' – eltonkamami

+0

@torazaburo脂肪箭頭功能是正確的。有人稱它不正確lambda –

回答

2

這是一個arrow function它是ECMAScript標準(自2015年發佈以來也稱爲ECMAScript 2015)的最新第6版的一部分。它不如許多瀏覽器支持,你可以看到here

您可以在舊版瀏覽器中使用它們,使用名爲transpiler的東西,它實際上只是將ECMAScript 6代碼(它不是那麼好支持)轉換爲更兼容的ECMAScript 5代碼。有很多,但Babel是最流行的一個。您可以試試here並觀察箭頭函數如何轉換爲可在所有瀏覽器中工作的兼容的ECMAScript 5代碼。

我喜歡用這個的原因是因爲你仍然可以參考這個 和它的價值和方法

你可以得到箭頭功能,您使用bind()給出了相同的結果。試試這個:

Api.get().then(function(data) { 
    console.log('do something with data', data); 
}.bind(this), function(e) { 
    console.log('Error: ', e); 
}.bind(this)); 

什麼bind()所做的就是創建一個新的功能,設置發送任何對象作爲第一個參數,以this。這樣您仍然可以訪問您正在處理的當前範圍。你可以閱讀更多關於bind()here

我希望這能回答你的問題。

+0

好吧,爲了公平起見,在這種情況下,甚至不使用上下文,所以'綁定'是不必要的。但你有正確的想法。 –

+2

我知道沒有使用上下文,但是Tom特別提到他使用箭頭函數的主要原因是他可以在當前詞法範圍中使用'this'。這就是爲什麼我建議使用'bind()'。 –

+1

謝謝你,你完全回答了我的問題,並在我所問的範圍內回答!我很欣賞這正是我所尋找的澄清! –

相關問題