
在 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 有的啊, () => {} 是新功能,不是替代旧功能。 而且 () => {} 函数和 function () {} 的含义也不一样,是两种用途 |
2 tedd OP 哦哦,表达不是特别清楚, ES6 中可以用之前一样的语法来 function declaration ,我想问的是,在 ES6 中有什么简便的语法来做 function declaration 吗? |
3 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(){} 才类似呢 |
4 xingo 2017-03-08 14:38:46 +08:00 我觉得应该没有?有的话请楼下 at 我,谢谢! |
5 AV1 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 就继续用 |