JavaScript是一种常用的脚本语言,用于网页交互和动态效果的实现。在编写JavaScript代码时,变量是不可避免的,var可以声明变量,但是也可以不用var声明变量。那么,有var与无var的区别是什么呢?
使用var声明变量时,变量的作用域是局部的,不能在函数外访问。非严格模式下,如果变量没有使用var进行声明,该变量就会成为一个全局变量,而全局变量可能会造成变量名重复的问题,从而引发不必要的麻烦。
// 使用var声明变量a,只能在函数内部访问 function foo() { var a = 1; console.log(a); // 1 } foo(); console.log(a); // Uncaught ReferenceError: a is not defined // 不使用var声明变量b,会成为全局变量 function bar() { b = 2; console.log(b); // 2 } bar(); console.log(b); // 2
当使用var时,变量提升也会发生。即在函数内部声明的变量,会在函数运行之前就存在。而不使用var声明时,变量提升不会发生,变量只有在赋值时才会被创建。
// 函数内部使用var声明的变量,会在函数运行之前就存在,因此可以在声明之前先使用变量 function baz() { console.log(d); // undefined var d = 4; console.log(d); // 4 } baz(); // 函数内部不使用var声明的变量,不会发生变量提升,因此在变量声明前使用该变量会导致错误 function qux() { console.log(e); // Uncaught ReferenceError: e is not defined e = 5; console.log(e); // 5 } qux();
总之,使用var声明变量可以避免全局变量造成的命名冲突问题,还可以避免变量提升带来的问题。而不使用var声明变量可能会引发不必要的麻烦,应该尽量避免。