在日常的js开发中,我们经常会遇到这样的事情,当变量前加var和不加var好像对程序的运行没什么影响,那到底加var和不加var有什么区别呢?
首先我们要清楚一下下面代码的含义
//this is a declaration 声明一个变量
var foo;
//this is an assignment 给变量赋值
bar = 3;
//this is a declaration and an assignment 声明变量,同时给此变量赋值
var dual = 5;
我们再看一下这段代码
var foo = 1; // declared properly 声明一个变量并赋值
bar = 2; // implied global
window.baz = 3; // global via window object
delete foo; // false
delete bar; // true
delete baz; // true
foo; // 1
bar; // ReferenceError
baz; // ReferenceError
用var声明的变量会被赋予一个不可被删除的属性,因此当我们用delete去删除他们是不可以的,而没有var声明的变量则可以被删除,因为(bar =2)我们在赋值的时候他会逐层的在作用域中找同名的变量bar,如果找到的话,他会引用此变量,如果没有找到,他最终会被赋给全局对象window,此时,我们用window.bar就可以查看到这个值
var foo = 'first time use';
foo = 'second time use';
所以,我们在定义变量的时候不加var,大多数情况是我们已经声明了这个变量,而此时,我只想更改这个变量的值而已。
external = 5;
function firsttry() {
var external = 6;
alert("first Try: " + external);
}
function secondtry() {
external = 7;
alert("second Try: " + external);
}
alert(external); // Prints 5
firsttry(); // Prints 6
alert(external); // Prints 5
secondtry(); // Prints 7
alert(external); // Prints 7
在正常的开发中,如果没有特殊情况建议不要把var漏掉,如果漏掉了可能会出现你想不到的棘手问题。
对学习抱有热情的开发小伙伴欢迎加入 qq群685421881,更欢迎热爱编程的妹子进入,让我们一起学习 并进步吧!
网友评论