【问题标题】:Are arrays as default arguments safe in Javascript?数组作为默认参数在 Javascript 中是否安全?
【发布时间】:2019-09-09 19:33:59
【问题描述】:

我从 Python 转向 Javascript。在 Python 中,如果您使用列表或字典作为函数的默认参数,则每次调用都会看到相同的对象。所以如果你有这样的功能:

def append_to_list(lst=[]):
  lst.append(1)
  return lst

然后这样称呼它:

lst1 = append_to_list()
lst2 = append_to_list()

lst2 的值将是 [1, 1] 而不仅仅是 [1]

Javascript 是否存在与默认参数相同的问题?

【问题讨论】:

  • 每次调用函数时都会创建一个新数组。 lst2 和 lst1 将是数组的 2 个相同但不同的副本。换句话说,没有。
  • 感谢您的确认。刚刚测试了自己。很惊讶我在 SO 上找不到这样的问题,所以想将其发布为快速参考。
  • 为什么不赞成这个?
  • 我认为我无法根据该问题猜测这种情况下的行为。这也说明 JS 急切地评估它的论点。 Python 在函数定义时评估其默认参数,这也将被归类为渴望。

标签: javascript python default-arguments


【解决方案1】:

它似乎没有同样的问题。用函数测试:

function append_to_list(lst=[]) {
  lst.push(1)
  return lst
}

并且以相同的方式调用两次都返回[1]

【讨论】:

    【解决方案2】:

    在 JS 中,您没有 Python 中那样的功能。

    假设你使用的是 ES6:

    let appendToList = (a, b=[]) => {
      b.push(1);
      return b;
    }
    
    console.log(appendToList(1));
    console.log(appendToList(2));
    

    输出:

    > Array [1]
    > Array [1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 2015-12-10
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      相关资源
      最近更新 更多