在 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 = ()=> {}
1
fy 2017-03-08 14:29:17 +08:00 1
有的啊, () => {} 是新功能,不是替代旧功能。
而且 () => {} 函数和 function () {} 的含义也不一样,是两种用途 |
2
tedd OP 哦哦,表达不是特别清楚, ES6 中可以用之前一样的语法来 function declaration ,我想问的是,在 ES6 中有什么简便的语法来做 function declaration 吗?
|
3
xingo 2017-03-08 14:36:57 +08:00 1
ES2015 兼容 ES5 , function a() {} 还是他原来的意思
var a = function (){} a 声明提前,但赋值是到运行这条语句的时候才会赋值, ES5 let a = () => {} 首先 let 是声明不会提前,其次赋值也是到运行这条语句的时候才会赋值 ,箭头函数 /let 是 ES2015 新增内容 var a = () => {} 那和你说的 var a = function(){} 才类似呢 |
4
xingo 2017-03-08 14:38:46 +08:00
我觉得应该没有?有的话请楼下 at 我,谢谢!
|
5
DOLLOR 2017-03-08 14:58:47 +08:00
ES6 的 arrow function 不是用来“取代” ES5 的普通函数的,其设计初衷是简化 lambda expression 的写法。
所以,不要想当然地恨不得把所有的 function declaration 都换成 arrow function 。该用 function declaration 时还得老老实实地用 function declaration 。 |
6
fy 2017-03-08 18:36:31 +08:00
@tedd 没有简便语法,和原来一样。
箭头函数的 this 是外部的 this ,这个在 callback 的场景非常明显!不用保存上级的 this 引用。 当然特定时候也有必须要用 this 就不能用箭头函数了。 |
7
ksmagi 2017-03-08 20:25:50 +08:00
arrow function == (function () {}).bind(this)
|
8
fytriht 2017-03-08 21:26:07 +08:00 via Android
function () {} 已经很简单了吧
|
9
chnwillliu 2017-03-08 21:32:45 +08:00
在对象字面量和 class 中声明函数属性,可以直接括号,不需要 function 关键字。所以大部分场合 function 关键字是可以被干掉了。
|
10
tedd OP @chnwillliu 请问你指的是这样写吗?也不需要 let 和 const ?`something = () => { }`
|
11
kamikat 2017-03-09 01:05:08 +08:00
|
12
bombless 2017-03-09 01:33:10 +08:00 via Android
es6 加了个在字面量定义函数的功能也挺方便
+{ a() {} }.a() |
13
bombless 2017-03-09 01:33:44 +08:00 via Android
噗,才看到上面已经说了
|
14
SoloCompany 2017-03-09 01:37:15 +08:00
严格来说叫 lambda
实现上来说箭头函数是匿名函数 都叫做匿名函数了,何来声明? |
15
bombless 2017-03-09 01:46:10 +08:00 via Android
其实现在很多人的习惯是写 const f = () => 0 这样的,我也不知道为什么,可能是不喜欢声明提前吧
|
16
felix389 2017-03-16 13:50:13 +08:00
现在的()=> {}比以前方便了啊,要是还是 function declaration 就继续用
|