JavaScript中重复声明创建同名变量是否会引发运行问题?
JavaScript中var重复声明同名变量的影响结论
同作用域下使用var重复声明同名变量不会引发运行异常,也不会产生功能性故障,具体原因和实际执行逻辑如下:
var声明存在变量提升(Hoisting)机制:所有var声明会被提前到当前函数/全局作用域的最顶部解析,同一作用域内对同名变量的重复var声明会被JS引擎直接忽略,仅保留首次声明。- 问题中提到的ScriptListener生成代码,实际执行时会被引擎解析为如下逻辑:
// 变量声明被提升到作用域顶部,重复声明被合并 var idChnl; // 原位置的两行代码仅保留赋值逻辑,按顺序执行 idChnl = charIDToTypeID( "Chnl" ); idChnl = charIDToTypeID( "Chnl" );
- 由于两次赋值传入的参数完全一致,变量最终的存储值和单次声明赋值的结果完全相同,连重复赋值可能带来的值覆盖逻辑差异都不存在,运行效果和只写一次声明赋值没有任何区别。
补充注意事项
- 上述特性仅适用于
var声明:ES6标准新增的let/const不允许同作用域重复声明同名变量,会直接抛出语法错误导致脚本无法运行。但Photoshop脚本使用的ExtendScript引擎基于ES3标准实现,不支持let/const,因此不会触发这类报错。 - 这类重复声明属于无意义的代码冗余,仅会轻微增加代码体积,不会造成运行时性能损耗、逻辑异常或者程序崩溃。
内容的提问来源于stack exchange,提问作者Ghoul Fool
相关产品推荐
相关产品推荐

