应该说区别大家都清楚,用var定义就是作用域内变量,不用var就是全局变量。
实际上还有一个区别,用var定义的不能用delete删除,不用var的可以用delete删除,也就是说,实际上不用var定义的变量变成了某个对象的属性。
这是MDN上的说法:
delete 操作符与直接释放内存(只能通过解除引用来间接释放)没有关系。可查看内存管理页面。
你可以使用
delete
操作符来删除一个隐式声明的全局变量,也就是没有使用var
定义的全局变量.全局变量其实是global对象(window)的属性.如果
delete
操作符删除成功,则被删除的属性将从所属的对象上彻底消失。然后,如果该对象的原型链上有一个同名属性,则该对象会从原型链上继承该同名属性。
举例如下:
<script> var a = 3; //局部变量 b = 4; //隐性全局变量,实际是全局属性 alert(delete a); //局部变量不能通过delete操作符删除,返回false alert(delete b); //局部属性可以通过delete操作符删除,返回true alert(a); //未删除,可以找到 alert(b); //已删除,语法错误,undefined </script>