【问题标题】:Adding parameters in ...args在 ...args 中添加参数
【发布时间】:2020-11-06 21:24:06
【问题描述】:

我正在像这样调试console.log 包装器:

debug = logger('[DEBUG] ' + ...args)
info = logger('[INFO] ' + ...args)
warn = logger('[WARN] ' + ...args)
error = logger('[ERR] ' + ...args)

function logger (...args) {
   console.log(arguments[0] + ' ' + arguments[1])
}

info('This is some info')
debug('This is some debug')
warn('This is some warn')
error('This is some error')

但我收到一个错误:

SyntaxError: expected expression, got '...'

如何在 ...args 之前传递参数?或者任何其他简单的方法我可以做我想要实现的上述目标?

小提琴: http://jsfiddle.net/keechan/e3wxLjmt/29/

【问题讨论】:

    标签: javascript node.js logging


    【解决方案1】:

    您可以在记录器函数中接受一个字符串参数,并返回一个新函数,该函数在记录之前添加该字符串。

    function logger (str) {
       return function(...args){
           console.log(str, ...args);
       }
    }
    debug = logger('[DEBUG]')
    info = logger('[INFO]')
    warn = logger('[WARN]')
    error = logger('[ERR]')
    

    Demo!

    【讨论】:

      【解决方案2】:

      我认为您混淆了 rest 运算符的工作方式和需要定义的位置。此外,您传递了args,然后尝试使用arguments。这是一个可行的解决方案,可将您的声明转换为接受 args 的函数,然后在 logger 中使用它:

      const debug = (args) => logger('[DEBUG] ' + args)
      const info = (args) => logger('[INFO] ' + args)
      const warn = (args) => logger('[WARN] ' + args)
      const error = (args) => logger('[ERR] ' + args)
      
      function logger (...args) {
         console.log(args[0] + ' ' + args[1])
      }
      
      info('This is some info')
      debug('This is some debug')
      warn('This is some warn')
      error('This is some error')

      但请记住,在上面,您仍然没有真正按照您的预期使用函数——我们只传递了一个参数(预先连接的两个字符串)。但是您可以看到,如果您传递单独的 args,它也可以工作:

      const debug = (msg) => logger('[DEBUG] ', msg)
      const info = (msg) => logger('[INFO] ', msg)
      const warn = (msg) => logger('[WARN] ', msg)
      const error = (msg) => logger('[ERR] ', msg)
      
      function logger (...args) {
         console.log(args[0] + ' ' + args[1])
      }
      
      info('This is some info');
      debug('This is some debug');
      warn('This is some warn');
      error('This is some error');

      【讨论】:

        猜你喜欢
        • 2018-10-21
        • 2021-12-24
        • 2018-04-08
        • 1970-01-01
        • 1970-01-01
        • 2020-01-04
        • 2020-06-10
        • 1970-01-01
        • 2022-01-14
        相关资源
        最近更新 更多