定义变量用var和不用var的区别。

应该说区别大家都清楚,用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>
原文地址:https://www.cnblogs.com/jingubang/p/4633223.html