ES6 中没有函数申明的语法了吗?

2017-03-08 14:25:39 +08:00
 tedd

在 ES5 中,我经常用函数申明 function declaration 来申明函数

function myFunc() {}

这样的好处是我可以把函数的实现写在最下方,这样让程序更易读,看了前面就知道大概逻辑了,如果需要再往下看具体的小函数的实现

doSomething();
doSomethingElse();

function doSomething() {}
function doSomethingElse() {}

如果用 function expression 的话,就需要将 expression 写在调用的前面

var doSomething = function() {}
var doSomethingElse = function() {}

doSomething();
doSomethingElse();

但 ES6 中好像只支持 function declaration 了...

let doSomething = ()=> {}
3380 次点击
所在节点    JavaScript
16 条回复
fy
2017-03-08 14:29:17 +08:00
有的啊, () => {} 是新功能,不是替代旧功能。

而且 () => {} 函数和 function () {} 的含义也不一样,是两种用途
tedd
2017-03-08 14:35:15 +08:00
哦哦,表达不是特别清楚, ES6 中可以用之前一样的语法来 function declaration ,我想问的是,在 ES6 中有什么简便的语法来做 function declaration 吗?
xingo
2017-03-08 14:36:57 +08:00
ES2015 兼容 ES5 , function a() {} 还是他原来的意思

var a = function (){} a 声明提前,但赋值是到运行这条语句的时候才会赋值, ES5

let a = () => {} 首先 let 是声明不会提前,其次赋值也是到运行这条语句的时候才会赋值 ,箭头函数 /let 是 ES2015 新增内容

var a = () => {} 那和你说的 var a = function(){} 才类似呢
xingo
2017-03-08 14:38:46 +08:00
我觉得应该没有?有的话请楼下 at 我,谢谢!
DOLLOR
2017-03-08 14:58:47 +08:00
ES6 的 arrow function 不是用来“取代” ES5 的普通函数的,其设计初衷是简化 lambda expression 的写法。
所以,不要想当然地恨不得把所有的 function declaration 都换成 arrow function 。该用 function declaration 时还得老老实实地用 function declaration 。
fy
2017-03-08 18:36:31 +08:00
@tedd 没有简便语法,和原来一样。

箭头函数的 this 是外部的 this ,这个在 callback 的场景非常明显!不用保存上级的 this 引用。

当然特定时候也有必须要用 this 就不能用箭头函数了。
ksmagi
2017-03-08 20:25:50 +08:00
arrow function == (function () {}).bind(this)
fytriht
2017-03-08 21:26:07 +08:00
function () {} 已经很简单了吧
chnwillliu
2017-03-08 21:32:45 +08:00
在对象字面量和 class 中声明函数属性,可以直接括号,不需要 function 关键字。所以大部分场合 function 关键字是可以被干掉了。
tedd
2017-03-08 21:47:03 +08:00
@chnwillliu 请问你指的是这样写吗?也不需要 let 和 const ?`something = () => { }`
kamikat
2017-03-09 01:05:08 +08:00
bombless
2017-03-09 01:33:10 +08:00
es6 加了个在字面量定义函数的功能也挺方便

+{ a() {} }.a()
bombless
2017-03-09 01:33:44 +08:00
噗,才看到上面已经说了
SoloCompany
2017-03-09 01:37:15 +08:00
严格来说叫 lambda
实现上来说箭头函数是匿名函数
都叫做匿名函数了,何来声明?
bombless
2017-03-09 01:46:10 +08:00
其实现在很多人的习惯是写 const f = () => 0 这样的,我也不知道为什么,可能是不喜欢声明提前吧
felix389
2017-03-16 13:50:13 +08:00
现在的()=> {}比以前方便了啊,要是还是 function declaration 就继续用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/345862

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX