重复多次定义同一个变量有什么危害呢

2015-11-30 15:58:27 +08:00
 hxlx

今天在项目中,突然发现一个问题,在 javascript 中,重复多次的定义同一个变量有什么危害呢??

2739 次点击
所在节点    问与答
4 条回复
learnshare
2015-11-30 16:08:22 +08:00
覆盖掉了之前的声明,或许连作用域也改了。
反正是不建议重复声明
Felldeadbird
2015-11-30 22:58:52 +08:00
记得有这么一件事。某个功能同事写的,他把一个原有的变量覆盖了。后面的用到盖变量的业务数据全乱了。然后呢,采购那边表格数据看都不看,就直接下采购单了。。。最后我被罚了。
SoloCompany
2015-12-01 02:28:30 +08:00
我来唱一下反调
我觉得,严格来说,没有危害
首先 javascript 里面没有块作用域(假定楼主不是在讨论 ES6 的 let )
如果是函数作用域里面的,写和不写 var 完全不等价,多写一个 var 不在「重复多次定义」的范畴内
而如果在同一个作用域之内(比如不同的块),多写一个 var 并不会产生任何副作用,相反他会给你带来多一重保险

比如下面的代码
for (var i =1; i < 10; …) {
// do something
}

for (var i = 2 …) {
// do something
}

第二个 for 里面的 var 不管你写不写, i 的初始值都是 10 (当然,重新赋值后变成了 2 )
某些编译器(比如 IDEA , WebStorm 等)会给你个警告,因为变量重复定义

假如某一天,前面的第一段代码被意外删除了,那么第二段代码因为多写了个 var ,就有了多一重保险,不会因为前面的代码的意外删除而导致作用域泄露

分析到这里,有不同意见欢迎提出
yuriko
2015-12-01 18:13:58 +08:00
有个值得注意的事情,就是 js 的作用域并不是按 block 区分的……我是最近才反应过来的……

@SoloCompany
@Felldeadbird
@learnshare

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/240034

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX