为什么返回这个ECMAScript Harmony箭头函数表达式会产生意想不到的行为?
Why does returning this ECMAScript Harmony arrow function expression produce unexpected behavior?
我一直在玩ECMAScript 6的新特性,这个问题与箭头函数有关。下面的代码是分配给Function
对象原型的一个简单的函数组合方法。使用简单的匿名函数可以很好地工作,但使用箭头函数就不行。
Function.prototype.compose = function (bar) {
var foo = this;
return function () {
return foo(bar.apply(null, arguments));
};
};
var addFive = function (baz) {
return baz + 5;
};
var addTen = function (hello) {
return hello + 10;
};
var addFifteen = addFive.compose(addTen);
console.log(addFifteen(10));
http://jsfiddle.net/oegonbmn/Function.prototype.compose = function (bar) {
var foo = this;
return () => foo(bar.apply(null, arguments));
};
var addFive = function (baz) {
return baz + 5;
};
var addTen = function (hello) {
return hello + 10;
};
var addFifteen = addFive.compose(addTen);
console.log(addFifteen(10));
http://www.es6fiddle.com/hyo32b2p/第一个将25
正确地记录到控制台,而第二个记录功能(hello) { return hello + 10; }105
,这并不能确切地告诉我我做错了什么。
我没有返回箭头函数中的值,因为它应该隐式返回最后一个语句(在这个实例中的第一个和最后一个),我认为手头的问题可能与词法作用域和this的值有关。有人能解释一下吗?
this
和arguments
都没有(重新)绑定在箭头函数中,而是在词法范围内。也就是说,您将获得它们在周围作用域中绑定的任何内容。
在ES6中,无论如何都不赞成使用arguments
。首选的解决方案是使用rest参数:
Function.prototype.compose = function (bar) {
return (...args) => this(bar.apply(null, args));
};
或者,实际上是:
Function.prototype.compose = function (bar) {
return (...args) => this(bar(...args));
};
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- ng init中的表达式无法使用ng repeat
- 正则表达式在字符串中找到base64
- 我的AngularJS表达式没有'不起作用
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 表达式引擎扩展开发-向呈现的条目添加自定义javascript
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- "锻造;React中的表达式
- 为什么返回这个ECMAScript Harmony箭头函数表达式会产生意想不到的行为?