Javascript 在已经存在的变量上使用“var”的问题

2024-03-31

假设我启动了一个var for an Object在我的代码中

var base = {x:Infinity, y:Infinity};

后来在同样的范围内我做了

var base = {x:0, y:0}

我知道我可以重新使用现有变量,但我正在尝试迭代一个点.

  1. 就内存而言,这会对当前作用域造成任何问题吗?
  2. 如果这些在不同的范围内会有什么问题吗?
  3. 一般规则是永远不要对已经存在的变量使用 var 吗?
  4. 如果我这样做了几次(数千次),我会遇到任何“时髦”问题吗?

  1. 它释放了对旧值的保留,因此它可能会被垃圾收集。我说潜在的,因为对象可以被不同的变量引用。

  2. 如果它们处于不同的范围内,则内部base将遮盖外部值(假设您正在谈论嵌套范围),因此旧值不会被覆盖。通常最好避免阴影。

  3. 一般来说,在相同的范围内,是的,但这更多的是编码风格方面。它不会对执行产生有效的影响,因为无论您声明多少次相同的声明,都只有一个声明var在同一范围内。

  4. 依靠。你是在谈论循环覆盖吗?如果您不再需要当前值,那应该不是问题。


需要明确的是,当您执行此操作时:

var base = {x:Infinity, y:Infinity};

var base = {x:0, y:0}

真正发生的事情是这样的:

var base;  // declaration is hoisted

base = {x:Infinity, y:Infinity};  // new object is referenced by base

base = {x:0, y:0}  // previous object is released, and new object is referenced

请注意,当我谈论范围和var,我专门谈论函数范围。在标准 JavaScript/ECMAScript 实现中,没有块作用域,因此使用时没有特殊含义var in a for例如声明。

正如所提到的@查尔斯·贝利 https://stackoverflow.com/users/19563/charles-bailey, Mozilla 有let,它确实允许在块中确定作用域,但它需要特定的关键字。这var语句无法识别变量范围的块。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript 在已经存在的变量上使用“var”的问题 的相关文章

随机推荐