| 参数 | 描述 |
|---|---|
| varname | 必须。指定变量名。 变量名可以包含字母,数字,下划线和美元符号。
|
| value | 可选。指定变量的值。 注意: 如果变量声明未指定值,其默认值为 undefined |
var a = "aa";alert(a); //弹出 "aa"alert(window.a)//弹出"aa"明白了吧,你声明一个全局变量其实是给"window"对象增加了一个属性,下面一段代码有相同效果
a = "aa";alert(a); //弹出 "aa"alert(window.a)//弹出"aa"那"var a = "aa" " 和 "a = "aa" " 都是全局变量,有啥区别了? 看下面两段段代码
var a = "aa";delete window.a; // false a = "aa";delete window.a; // true都是为"window"对象增加了属性,一个可以删除,一个不能删除。但是加上"var"就可以作用域相关了,不加"var"始终都是在为"window"对象动态添加属性,以下代码为证
var test = function(){ a = "aa";}test();alert(window.a);//弹出"aa" 由于window对象是全局对象,因此默认可以不加,下面这段同样效果var test = function(){ a = "aa";}test();alert(a);//弹出"aa" 说到这,认真思考的同学现在必然有个疑问, 为啥隐式声明的全局变量可以删除,显式声明的全局变量就无法删除?delete Object.prototype; // false 不可删除,该属性是不可配置的var a = "aa";delete window.a;//false 不可删除,该属性是不可配置的function test(){};delete window.test;//false 不可删除,该属性是不可配置的 那这样不就明白了,通过"var"声明的全局变量,其实际上是为"window"对象增加了一个不可配置的属性, 而不加"var"声明的全局变量,其实际上是为"window"对象增加了一个可以配置的属性。var test = function(){ a = "aa";}test();alert(this.a);//弹出"aa" 至于原因,请查看鄙人之前写的文章 "this,this,再次讨论javascript中的this,超全面"var var01 = 1;function funtest() { document.write(var01); var var01 = 0;} 结果为:undefinedvar var01 = 1;function funtest() { document.write(var01); var01 = 0;} 结果为:1 var01 = 1;function funtest() { document.write(var01); var var01 = 0;}结果为:undefinedvar01 = 1;function funtest() { document.write(var01); var01 = 0;}结果为:1