V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
hxlx
V2EX  ›  问与答

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

  •  
  •   hxlx · 2015-11-30 15:58:27 +08:00 · 2706 次点击
    这是一个创建于 3284 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    4 条回复    2015-12-01 18:13:58 +08:00
    learnshare
        1
    learnshare  
       2015-11-30 16:08:22 +08:00
    覆盖掉了之前的声明,或许连作用域也改了。
    反正是不建议重复声明
    Felldeadbird
        2
    Felldeadbird  
       2015-11-30 22:58:52 +08:00
    记得有这么一件事。某个功能同事写的,他把一个原有的变量覆盖了。后面的用到盖变量的业务数据全乱了。然后呢,采购那边表格数据看都不看,就直接下采购单了。。。最后我被罚了。
    SoloCompany
        3
    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
        4
    yuriko  
       2015-12-01 18:13:58 +08:00
    有个值得注意的事情,就是 js 的作用域并不是按 block 区分的……我是最近才反应过来的……

    @SoloCompany
    @Felldeadbird
    @learnshare
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1841 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:38 · PVG 00:38 · LAX 08:38 · JFK 11:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.