Получение аргументов, переданных функции стрелки ES6 с использованием переменной arguments

Я понимаю, как функции стрелок работают в 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. Так что, если есть какой-то ES6 способ получить аргументы в функции стрелки ES6, это было бы прекрасно!

1 ответ

Функции стрелок не имеют своих собственных аргументов this и. Сказав это, вы все равно можете получить все аргументы, передаваемые в функции стрелок, используя параметр распространения параметров 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

Другие вопросы по тегам