全局变量的三种声明方法
2010-09-23 15:08
148 查看
全局变量有如下三种声明方法(这里以举声明FWK这个变量为例):
1、使用var直接声明varFWK;
2、使用window.FWK=….;
3、隐式声明全局变量(定义FWK前不加var)FWK
它们的区别在哪里呢?更提倡何种写法?
使用var定义的变量,将被提前预解析,如下的代码:
<scripttype="text/javascript">
alert(FWK);
FWK ='ddd';
</script><scripttype="text/javascript">
alert(FWK);
window.FWK ='ddd';
</script><scripttype="text/javascript">
alert(FWK);
varFWK ='ddd';
</script>其它的二种声明方法,将会被告知FWK未定义(FWKisnotdefined)看看这三种声明的方式,是否能被forin出来:<scripttype="text/javascript">
window.FWK='ddd';
for(variinwindow){
if(i==='FWK'){
alert(i+'---'+window[i]);
}
}
</script><scripttype="text/javascript">
FWK ='ddd';
for(variinwindow){
if(i==='FWK'){
alert(i+'---'+window[i]);
}
}
</script>
<scripttype="text/javascript">
varFWK ='ddd';
for(variinwindow){
if(i==='FWK'){
alert(i+'---'+window[i]);
}
}
</script>
除了window.FWK的方式能被forin出来,其它二种均不行。
再看看它们是否能被delete:
<scripttype="text/javascript">
varFWK ='ddd';
alert( deleteFWK );
alert(FWK);
</script>
显示falseddd,说明var声明的变量无法使用delete
<scripttype="text/javascript">
FWK ='ddd';
alert( deleteFWK );
alert(FWK);
</script>
显示trueFWK未定义,说明隐式声明的全局变量可以被delete,与global对象的parseInt、escape、parseFloat等等类似,可直接被delete。
<scripttype="text/javascript">
alert(parseInt);
alert(deleteparseInt);
alert(parseInt);
</script>
<scripttype="text/javascript">
window.FWK ='ddd';
alert( deleteFWK );
alert(FWK);
</script>
IE下会提示
,其它浏览器Chrome、FireFox可以被删除,表现上与隐式声明的变量一致。
但IE下为何会提示对象不支持此操作呢?
根据《Javascript编程精髓和编程实践》中的说明,IE的Javascript引擎来自ActiveScript系统,而window对象来自浏览器的DOM系统,所以在IE中window.x使用delete类似于下面的操作:
<scripttype="text/javascript">
vardiv=document.createElement("div");
div.x='ddd';
alert(deletediv.x);
</script>
当然是不可以了,而其它浏览器它们的Javascript引擎不像IE这么复杂,所以并不会出现此问题。
既然提到了delete操作符,那就再深入一点:)
使用eval直接声明的var变量可以被delete
<scripttype="text/javascript">
eval('varFWK="abc";');
alert(FWK);
alert(deleteFWK);
alert(FWK);
</script>
其中eval本身就属于Global对象,但对于eval代码中的函数内通过var声明的变量却不能被delete。如下:
<scripttype="text/javascript">
vark=eval("(function(){varFWK=42;alert(deleteFWK);returnFWK;})();")
alert(k);
</script>
1、使用var直接声明varFWK;
2、使用window.FWK=….;
3、隐式声明全局变量(定义FWK前不加var)FWK
它们的区别在哪里呢?更提倡何种写法?
使用var定义的变量,将被提前预解析,如下的代码:
window.FWK='ddd';
for(variinwindow){
if(i==='FWK'){
alert(i+'---'+window[i]);
}
}
</script>
FWK ='ddd';
for(variinwindow){
if(i==='FWK'){
alert(i+'---'+window[i]);
}
}
</script>
varFWK ='ddd';
for(variinwindow){
if(i==='FWK'){
alert(i+'---'+window[i]);
}
}
</script>
除了window.FWK的方式能被forin出来,其它二种均不行。
再看看它们是否能被delete:
varFWK ='ddd';
alert( deleteFWK );
alert(FWK);
</script>
显示falseddd,说明var声明的变量无法使用delete
FWK ='ddd';
alert( deleteFWK );
alert(FWK);
</script>
显示trueFWK未定义,说明隐式声明的全局变量可以被delete,与global对象的parseInt、escape、parseFloat等等类似,可直接被delete。
alert(parseInt);
alert(deleteparseInt);
alert(parseInt);
</script>
window.FWK ='ddd';
alert( deleteFWK );
alert(FWK);
</script>
IE下会提示
,其它浏览器Chrome、FireFox可以被删除,表现上与隐式声明的变量一致。
但IE下为何会提示对象不支持此操作呢?
根据《Javascript编程精髓和编程实践》中的说明,IE的Javascript引擎来自ActiveScript系统,而window对象来自浏览器的DOM系统,所以在IE中window.x使用delete类似于下面的操作:
vardiv=document.createElement("div");
div.x='ddd';
alert(deletediv.x);
</script>
当然是不可以了,而其它浏览器它们的Javascript引擎不像IE这么复杂,所以并不会出现此问题。
既然提到了delete操作符,那就再深入一点:)
使用eval直接声明的var变量可以被delete
eval('varFWK="abc";');
alert(FWK);
alert(deleteFWK);
alert(FWK);
</script>
其中eval本身就属于Global对象,但对于eval代码中的函数内通过var声明的变量却不能被delete。如下:
vark=eval("(function(){varFWK=42;alert(deleteFWK);returnFWK;})();")
alert(k);
</script>
相关文章推荐
- 基于JavaScript 声明全局变量的三种方式详解
- JavaScript声明全局变量三种方式的异同
- 全局变量和全局常量在多文件中声明的方法
- 基于JavaScript 声明全局变量的三种方式详解
- JavaScript声明全局变量三种方式的异同javascript
- 探讨JavaScript中声明全局变量三种方式的异同
- Qt软件开发文档7---全局变量(方法)的声明
- javascript 没有块级作用域 JavaScript声明全局变量三种方式 及
- 基于JavaScript 声明全局变量的三种方式
- Linux设置全局环境变量的三种方法
- 基于JavaScript 声明全局变量的三种方式详解
- 基于JavaScript 声明全局变量的三种方式详解
- JavaScript声明全局变量三种方式的异同
- Javascript全局变量的三种声明方式
- JavaScript声明全局变量的三种方式
- 探讨JavaScript中声明全局变量三种方式的异同
- JS 声明全局变量的三种方式
- 基于JavaScript 声明全局变量的三种方式详解
- Ionic 跨平台开发之AngularJS全局变量设置的三种方法
- 声明全局变量的三种方式