假设我启动了一个var
for an Object
在我的代码中
var base = {x:Infinity, y:Infinity};
后来在同样的范围内我做了
var base = {x:0, y:0}
我知道我可以重新使用现有变量,但我正在尝试迭代一个点.
- 就内存而言,这会对当前作用域造成任何问题吗?
- 如果这些在不同的范围内会有什么问题吗?
- 一般规则是永远不要对已经存在的变量使用 var 吗?
- 如果我这样做了几次(数千次),我会遇到任何“时髦”问题吗?
它释放了对旧值的保留,因此它可能会被垃圾收集。我说潜在的,因为对象可以被不同的变量引用。
如果它们处于不同的范围内,则内部base
将遮盖外部值(假设您正在谈论嵌套范围),因此旧值不会被覆盖。通常最好避免阴影。
一般来说,在相同的范围内,是的,但这更多的是编码风格方面。它不会对执行产生有效的影响,因为无论您声明多少次相同的声明,都只有一个声明var
在同一范围内。
依靠。你是在谈论循环覆盖吗?如果您不再需要当前值,那应该不是问题。
需要明确的是,当您执行此操作时:
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(使用前将#替换为@)