Получение аргументов, переданных функции стрелки 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