使用参数变量获取传递给 ES6 箭头函数的参数

Getting arguments passed to an ES6 arrow function using arguments variable

本文关键字:参数 ES6 函数 变量 获取      更新时间:2023-09-26

我了解箭头函数在 ES6 中的工作原理,以及词法,但我想知道是否有人知道将参数传递给箭头函数的方法?

在 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,或者在需要时在 IIEF 中使用。但这取决于函数中的arguments变量,我真的不想将其用作 ES5 函数,而是坚持使用 ES6 Arrow 函数。因此,如果有一些 ES6 方法可以在 ES6 箭头函数中获取参数,那就完美了!

箭头函数没有自己的 this参数。 话虽如此,您仍然可以将所有参数传递到 使用 Rest 参数的箭头函数,又名展开运算符
参考: 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