18

ES6 でアロー関数がどのように機能するか、およびレキシカルな this を理解していますが、アロー関数に渡される引数を取得する方法を誰かが知っているかどうか疑問に思っていましたか?

ES5 では、次のように簡単に実行できます。

function foo( bar, baz ){
    console.log('Args:', arguments.join(', '))
}

ただし、ES6 でアロー関数を使用すると、次のようになります。

const foo = ( bar, baz ) => {
    console.log('Args:', arguments.join(', '))
}

変数はオブジェクトを返しますが、これargumentsはパラメーターに近いものではありません。

それで、誰かがアロー関数に渡された引数を取得する方法を持っているかどうか疑問に思っていましたか?


編集

おそらく、私が達成しようとしていることについていくつかの情報を提供する必要があると思います.上記が不可能な場合は、誰かがより良いアイデアを持っています.

基本的に、IIEF を BluebirdJS のasCallbackメソッドに追加しています。これは、提供されたコールバックが実際にあったかどうかを判断し、提供されていない場合は 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

したがって、すべての ES5 関数を使用すると問題なく動作し、必要に応じて IIEF やその内部でそれらを使用してもかまいません。しかし、これはarguments、ES5関数として実際に使用したくない関数内の変数にかかっています。むしろ、ES6 Arrow関数に固執します。したがって、ES6アロー関数で引数を取得するES6の方法があれば、それは完璧です!

4

1 に答える 1

28

アロー関数には独自のthisおよびargumentsがありません。そうは言っても、残りのパラメーターAKAスプレッド演算子を使用して、アロー関数に渡されたすべての引数を取得でき
ます

function message(msg) {
  const foo = (...args) => console.log(args[0]);
  foo(`Message: ${msg}`);
}

message('Hello World'); // Message: Hello World

于 2016-02-12T17:17:36.823 に答える