【问题标题】:Getting arguments passed to an ES6 arrow function using arguments variable [duplicate]使用参数变量获取传递给 ES6 箭头函数的参数 [重复]
【发布时间】:2016-05-23 22:24:54
【问题描述】:

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

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

【问题讨论】:

  • 箭头函数不暴露arguments
  • 问题是我们是否可以同时解构({a, b}) => ( a + b ) 并获取参数。像(...args = {a, b}) => ( a + b + f(args) ) 这样的东西。它绝不是重复的。
  • 这个问题根本不是重复的,但答案可能是const foo = (...args) => { console.log('Args:', args.join(', ')) } 这是你使用胖箭头函数的方法
  • 在另一个问题的已接受答案底部附近有一个部分,称为“可变参数函数”,它回答了这个问题;即使用这个:foo = (...args) => {}。在另一个问题的上下文中很难找到。

标签: javascript callback arguments ecmascript-6 lexical-closures


【解决方案1】:

箭头函数没有自己的 this参数。 话虽如此,您仍然可以将所有参数传递给 使用 Rest parameters AKA spread operator 的箭头函数:
参考: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

【讨论】:

  • 传播运算符实际上有点跑题了。上面使用了一个 ES5 类型函数内部的箭头函数,所以这并没有完成我想要的。如果你能让message 函数本身成为一个箭头函数,那就足够了。
  • 你能链接到你引用的来源吗?或者这实际上不是引用?
  • @Justin:您可以使用 rest 参数访问传递给箭头函数的所有参数。箭头函数的上下文无关紧要。
  • FWIW,传播“算子”和其余参数是两个不同的东西。
  • 这是什么副本?顺便说一下,示例剩余扩展运算符并不是特别有用。我认为这样更好: myFat = ({x,y,z}) =>{ const {...args} = {x,y,z}; }
猜你喜欢
  • 2023-03-03
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
  • 2020-10-30
  • 2016-03-25
  • 2011-03-04
相关资源
最近更新 更多