详解JS中变量名和函数名同名问题
JS编程时应该尽量避免变量名和函数名同名,否则会发生相互覆盖的问题.从实际测试效果来看,这种覆盖可以分为两种情况:
-
定义变量时只使用var定义变量,不分配变量初始值,此时函数的优先级更高,函数会覆盖变量; 定以变量时为变量指定了初始值,此时变量的优先级更高,变量会覆盖函数.
代码举例如下:
<script>
function a(){}
var a;
console.log(a);
var b;
function b(){}
console.log(b)
var c=1;
function c(){}
console.log(c);
function d(){}
var d=1;
console.log(d);
</script>
运行结果如下图: 上面代码开始分别定义了名为a、b的函数和变量,由于定义变量a、b时并未指定其初始值,因此不管这些变量放在同名的函数名之前还是之后,变量都会被函数覆盖;
代码接下来定义了名为c、d的函数和变量,由于定义变量时为c、d变量指定了初始值,因此不管这些变量放在同名的函数名之前还是之后,变量都会覆盖函数.
