【发布时间】:2016-05-23 22:24:54
【问题描述】:
我了解箭头函数在 ES6 中是如何工作的,以及 this 的词法,但我想知道是否有人知道将参数传递给箭头函数的方法?
在 ES5 中,您可以简单地这样做:
function foo( bar, baz ){
console.log('Args:', arguments.join(', '))
}
然而,在 ES6 中,如果你使用箭头函数,像这样:
const foo = ( bar, baz ) => {
console.log('Args:', arguments.join(', '))
}
arguments 变量返回一个对象,它与参数无关。
那么,我想知道是否有人有办法将参数传递给箭头函数?
编辑
我想也许我应该提供一些关于我正在尝试完成的事情的信息,也许如果上述内容不可行,那么有人有更好的主意。
基本上,我在 BluebirdJS asCallback 方法中添加了一个 IIEF,它将确定是否确实提供了回调,如果没有,它返回承诺。
这是 ES5 中的一个工作示例:
var _ = require('lodash')
var Promise = require('bluebird')
function testFunc( foo, callback ) {
return new Promise( function ( res, rej ){
res('You Said: ' + (_.isString( foo ) ? foo : 'NOTHING') )
})
.asCallback((function ( args ) {
return _.findLast(args, function(a) {
return _.isFunction( a )
})
})( arguments ))
}
testFunc('test', function( err, data ) {
if( ! _.isEmpty( err ) )
console.log('ERR:', err)
else
console.log('DATA: ', data)
})
// DATA: You Said: test
testFunc(function( err, data ) {
if( ! _.isEmpty( err ) )
console.log('ERR:', err)
else
console.log('DATA: ', data)
})
// DATA: You Said: NOTHING
因此,如果我使用所有 ES5 函数,我不介意将它们用于 IIEF,或者如果需要的话,我不介意在其中使用它们。但这取决于函数内的arguments 变量,我真的不想用作 ES5 函数,而是坚持使用 ES6 箭头函数。因此,如果有一些 ES6 方法可以在 ES6 箭头函数中获取参数,那将是完美的!
【问题讨论】:
-
箭头函数不暴露
arguments。 -
问题是我们是否可以同时解构
({a, b}) => ( a + b )并获取参数。像(...args = {a, b}) => ( a + b + f(args) )这样的东西。它绝不是重复的。 -
这个问题根本不是重复的,但答案可能是
const foo = (...args) => { console.log('Args:', args.join(', ')) }这是你使用胖箭头函数的方法 -
在另一个问题的已接受答案底部附近有一个部分,称为“可变参数函数”,它回答了这个问题;即使用这个:
foo = (...args) => {}。在另一个问题的上下文中很难找到。
标签: javascript callback arguments ecmascript-6 lexical-closures