我理解箭头函数在ES6中是如何工作的,以及词法这个,但我想知道是否有人知道如何将参数传递给箭头函数?
在ES5中,您可以执行以下操作:
function foo( bar, baz ){
console.log('Args:', arguments.join(', '))
}
但是,在ES6中,如果使用箭头功能,如下所示:
const foo = ( bar, baz ) => {
console.log('Args:', arguments.join(', '))
}
arguments
变量返回一个对象,它与参数没什么关系。
所以,我想知道是否有人有办法将参数传递给箭头函数?
我想也许我应该提供一些关于我想要完成的事情的信息,如果上述情况不可能,那么有人会有更好的想法。
基本上,我将IIEF添加到BluebirdJS asCallback方法,该方法将确定是否实际提供了回调,如果没有,则返回承诺。
在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 Arrow函数。因此,如果有一些ES6方式在ES6箭头函数中获取参数,那将是完美的!
答案 0 :(得分:13)
箭头功能没有自己的此和参数。 话虽如此,您仍然可以将所有参数传递给 箭头功能使用休息参数 AKA 点差运算符:
参考:https://strongloop.com/strongblog/an-introduction-to-javascript-es6-arrow-functions/
function message(msg) {
const foo = (...args) => console.log(args[0]);
foo(`Message: ${msg}`);
}
message('Hello World'); // Message: Hello World