2016-07-22 56 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

谢谢你,你完全回答了我的问题,并在我所问的范围内回答!我很欣赏这正是我所寻找的澄清! –

相关问题