使用参数变量将参数传递给ES6箭头函数

Jus*_*tin 6 javascript arguments lexical-closures callback ecmascript-6

我理解箭头函数在ES6中是如何工作的,以及词汇这个,但是我想知道是否有人知道如何将参数传递给箭头函数?

在ES5中,您可以简单地执行以下操作:

function foo( bar, baz ){
    console.log('Args:', arguments.join(', '))
}
Run Code Online (Sandbox Code Playgroud)

但是,在ES6中,如果使用箭头功能,如下所示:

const foo = ( bar, baz ) => {
    console.log('Args:', arguments.join(', '))
}
Run Code Online (Sandbox Code Playgroud)

arguments变量返回一个对象,该对象与参数无关.

所以,我想知道是否有人有办法将参数传递给箭头函数?


编辑

我想也许我应该提供一些关于我想要完成的事情的信息,也许如果以上是不可能的,有人有更好的主意.

基本上,我正在向BluebirdJS asCallback方法添加一个IIEF ,它将确定是否实际提供了回调,如果没有,则返回promise.

下面是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
Run Code Online (Sandbox Code Playgroud)

因此,如果我使用所有ES5函数,那么工作正常,我不介意将它们用于IIEF,或者如果需要,可以在其中使用它们.但这取决于arguments函数内部的变量,我并不想将其用作ES5函数,而是坚持使用ES6 Arrow函数.因此,如果有一些ES6方式在ES6箭头函数中获取参数,那将是完美的!

Vic*_*ves 16

箭头函数没有自己的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
Run Code Online (Sandbox Code Playgroud)

  • 这是什么重复?顺便说一下,示例性静止扩展操作器并不是特别有用.我认为这更好:myFat =({x,y,z})=> {const {... args} = {x,y,z}; } (4认同)
  • 传播算子实际上不是主题。上面的代码在ES5类型的函数内部使用了一个箭头函数,因此无法实现我想要的功能。如果您可以使该`message`函数本身成为一个箭头函数,那么就足够了。 (2认同)