本文探讨JavaScript中变量声明使用var与省略var的区别。省略var虽合法但不安全,变量会被赋予全局作用域;使用var则安全且作用域取决于定义位置。通过示例说明函数内未声明变量引用的行为及全局变量的更新机制。
JavaScript变量声明中var的使用差异
首先展示一段示例代码:
function show(){
alert(abc);
}
var abc="defg";
show();
拥有C++或Java编程背景的开发者可能会认为这段程序存在严重错误,因为变量在函数引用之后才被定义,这通常会导致Bug。然而,在浏览器中执行该代码,结果却是完美运行。接下来我们将深入解析造成这种现象的原因,即使用var与不使用var定义变量之间的差异。
1、不使用var的情况
简而言之,在定义变量时省略var关键字是不安全的,尽管语法上是合法的。无论该变量在代码中的哪个位置被定义,JavaScript解释器都会将其作用域强制赋予为全局作用域。
2、使用var的情况
这种做法是安全且合法的。变量的作用域范围取决于其定义的具体位置。关于作用域的具体细节,可以参考本博客中关于“javascript作用域”的文章。
基于上述原理,开头提出的问题便得到了解答。函数内部实际上是对abc进行的定义,只不过此时其值为undefined。由于省略了var,abc具有全局作用域;而函数外部的操作仅仅是对abc这个全局变量值的更新。