JavaScript 中坑坑的 var
这周在开发过程中,感觉写的 JS 的代码要比 Ruby 多好多。顺便就翻了翻以前写 JS 时候纪录的很多资料,今天就来和大家分享一下这个虽然能做很多事情但是坑也很多的 JS 的其中一坑 - var
。
说 var 之前要先先说说 JavaScript 中的全局变量。通常来说,我们在 JavaScript 中要尽量减少全局变量的使用,因为这可能会造成变量名冲突。避免全局变量的最好的办法就是使用 var 关键字来声明变量。
在 JavaScript 中
- 你可以使用一个甚至没有声明的对象的变量
- 所有未声明的变量都会成为全局对象的一个属性 (就像一个声明了的全局变量一样)
function sum(a, b) {
result = x + y;
return result;
}
result 在没有被声明的情况下就被使用了,这个代码可以工作,但是在调用了这个函数之后就会多出一个名为 result 的全局变量,这很有可能会导致问题。
解决的方法就是使用 var
function sum(a, b) {
var result = a + b;
return result
}
其次,对于全局变量来说,使用 var 声明和没有使用 var 声明也是有区别的。
- 使用 var 声明创建的全局变量不能被删除
- 未使用 var 声明创建的全局变量可以被删除
因为没有使用 var 声明生成的全局变量不是真正的变量,他们只是全局对象的属性
。属性可以通过 delete 删除,但是变量不行。
预料之外的 var 看看下面的代码
myName = "global";
function func() {
alert(myName);
var myName = "local";
alert(myName);
}
func();
不知道大家对这段代码运行时 alert 的期待是什么呢?就我而言,我期待的是第一次是 global,第二次是 local。但实际上第一次是 undefined,第二次是 local。
因为在 JavaScript 中,只要变量在同一个作用域,那么就认为是声明了的。就算是在 var 语句之前使用也一样
。