【问题标题】:Prefer variables inside or outside anonymous function首选匿名函数内部或外部的变量
【发布时间】:2019-10-22 00:51:40
【问题描述】:

假设我有一个匿名函数,它需要一些变量来跟踪其状态。该函数与匿名函数内部或外部的变量相同。在决定在哪里定义变量时是否有任何性能或其他考虑因素?

例如。有什么理由喜欢这个

function fn () {
  let i = 0
  return something(cb => {
    setInterval(() => cb(i++), 1000)
  })
}

在此

function fn () {
  return something(cb => {
    let i = 0
    setInterval(() => cb(i++), 1000)
  })
}

如果匿名函数被多次调用,这些函数在功能上并不相同,但为了论证起见,假设它只会被调用一次。

【问题讨论】:

  • 一般来说,变量应该有最小的范围。

标签: javascript scope anonymous-function


【解决方案1】:

唯一值得担心的区别在于代码的可维护性。一般为variables should live in the smallest scope possible。这可以使代码更易于阅读。例如:

如果匿名函数被多次调用,这些函数在功能上并不相同,但为了论证起见,假设它只会被调用一次。

如果没有您明确说明,代码的读者可能会认为至少有可能多次调用fn(否则,外部范围变量的意义何在? ?)。

或者,想象一下函数中是否有更多代码:比较

function fn () {
  // a moderate amount of code
  return something(cb => {
    // a moderate amount of code
    let i = 0
    setInterval(() => cb(i++), 1000)
  })
}

function fn () {
  let i = 0
  // a moderate amount of code
  return something(cb => {
    // a moderate amount of code
    setInterval(() => cb(i++), 1000)
  })
}

第一个版本可能更可取,因为变量的声明非常接近它的使用位置,而第二个版本不是这种情况。

它们之间的另一个区别是,解释器寻找变量引用的范围链越远,处理所需的时间就越长,至少在某些情况下是这样。这在几乎所有情况下都完全无关紧要,但仍然存在潜在差异:比较 https://jsfiddle.net/pa2v9xuj/https://jsfiddle.net/wzo7bgve/

【讨论】:

    猜你喜欢
    • 2013-08-16
    • 1970-01-01
    • 2012-12-31
    • 2022-11-10
    • 2020-08-19
    • 2023-03-28
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    相关资源
    最近更新 更多