`
zhouyrt
  • 浏览: 1163751 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript中声明全局变量三种方式的异同

阅读更多

变量及声明变量是一门语言最基本的概念,入门者都会很快掌握。JavaScript中声明变量也是如此,很简单var(关键字)+变量名(标识符),如下:

 

var test;
//或var test = 5;

 

需注意的是该句不能包含在function内,否则是局部变量。这是第一种方式声明全局变量。下面是第二种方式:

 

test = 5;

 

没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test。即使该语句是在一个function内,当该function被执行后test变成了全局变量。

第三种方式如下:

 

window.test;
//或window.test = 5;

 

这种方式经常被用到一个匿名函数执行后将一些函数公开到全局。

 

如果只是使用变量test,那么三种方式将没有什么区别。比如:alert(test) 都将显示5。但三种方式在某些情况下还是有区别的,下面分别列出。

 

分别按以上三种方式声明三个变量a1,a2,a3:

 

a1 = 11;
var a2 = 22;
window.a3 = 33;
 

 

1,for in window对象时

 

for(a in window){
	if(a=='a1'||a=='a2'||a=='a3'){
		alert(a)
	}
}
 

 

IE6/7/8/及IE9 pre3  :只弹出了a3,说明通过第一,二种方式声明的全局变量通过for in window对象时将获取不到(原因:http://snandy.iteye.com/blog/723672 )。

Firefox/Chrome/Safari/Opera :a1,a2,a3都弹出了,说明三种方式声明的全局变量,通过for in window对象时都能获取到。

 

2,delete时

 

try {
	alert(delete a1);
}catch(e){alert('无法delete a1')}

try{
	alert(delete a2);
}catch(e){alert('无法delete a2')}

try{
	alert(delete a3);
}catch(e){alert('无法delete a3')}
 

结果如下:

 

IE6/7/8 IE9/Firefox/Chrome/Safari/Opera
delete a1 true true
delete a2 false false
delete a3 无法delete a3 true

 

可以看到,

 

1,delete a2所有浏览器都是false。即通过var声明的变量无法删除,所有浏览器表现一致。这在犀牛书上也有提到。

2,通过window.a3方式声明的全局变量在IE6/7/8/9中均无法删除,Firefox/Chrome/Safari/Opera中却可以。

3,IE9 pre3很奇怪,delete a1显示false,即不能delete隐式声明的全局变量。

 

虽然有以上两点不同,但当用in运算时,都返回true。如下

 

alert('a1' in window);//true
alert('a2' in window);//true
alert('a3' in window);//true
 

用with打开对象window闭包时,所有浏览器也表现一致,如下

 

with(window){
	if(a1){
		alert(a1);//11
	}
	if(a2){
		alert(a2);//22
	}
	if(a3){
		alert(a3);//33
	}	
}
 

 

 

 

 

 

分享到:
评论
19 楼 deng_1987 2010-09-07  
小问题 体现出高智慧
18 楼 lovelh 2010-08-11  
浏览器不同,实现就不同,有点麻烦
17 楼 xsb_110 2010-08-05  
很感谢,,,谢谢,学习到了。
16 楼 imp860124 2010-07-31  
学习了!!
15 楼 chrisyue 2010-07-31  
谢谢总结。
javascript在某些浏览器下面真的很难理解一些行为,不知道这些浏览器的javascript parser 程序员都在想什么
14 楼 hymanyung 2010-07-29  
JS浏览器兼容性真是烦人
13 楼 半边云 2010-07-28  
学习了,兼容一直都是问题
12 楼 pochonlee 2010-07-28  
 
11 楼 xuwenbo 2010-07-27  
浏览器的兼容问题是js最大的问题了。
10 楼 littleJava 2010-07-27  
不同的JavaScript引擎导致的,这种细节很是烦人
9 楼 liuleigang 2010-07-27  
楼主真的很细心。赞一个。
8 楼 whiletrue 2010-07-27  
学习了,很有意义的总结
7 楼 mgh2008 2010-07-27  
学习了,顶起
6 楼 Max_1106 2010-07-27  
浏览器兼容,唉
5 楼 zhy4013 2010-07-27  
不错,学习了。
4 楼 wgoku 2010-07-27  
喜欢这样的小总结,有时候就那么就 悟 啦
3 楼 javaDevil 2010-07-26  
javascript这个东西 不同浏览器实现 的 程度不同,有时很是恼火。
2 楼 la_ka 2010-07-26  
神奇啊,,,顶你~~~~~~~~~
1 楼 x1387420 2010-07-26  
不错的小知识 学习了

相关推荐

    探讨JavaScript中声明全局变量三种方式的异同

    在探讨JavaScript中声明全局变量的三种方式时,我们必须先了解JavaScript中变量声明的基本概念。JavaScript是一种弱类型语言,这意味着在声明变量时无需指定变量的类型,而且变量的作用域是由变量声明的位置来决定的...

    JavaScript进阶面试题_30题.pdf_前端面试题

    9. JavaScript 中的全局函数和全局变量:JavaScript 中有许多全局函数和全局变量,例如 Infinity、NaN、undefined、decodeURI()、decodeURIComponent()、encodeURI()、encodeURIComponent()、escape()、eval()、is...

    JavaScript基础入门

    - 避免全局变量滥用,减少代码耦合度。 - 充分利用现代JavaScript的模块化特性,如ES6的import/export。 - **性能优化:** - 优化DOM操作,减少不必要的重绘和重排。 - 合理使用事件监听器,避免内存泄漏。 - ...

    5分钟快速掌握JS中var、let和const的异同

    在JavaScript中,声明变量有三种方式:var、let和const。理解它们的异同对于学习JavaScript至关重要,尤其是对于初学者。下面将详细解释这三种声明方式,并通过实例演示它们的行为。 1. var var 是 JavaScript 的...

    JavaScript实例教程

    JavaScript是一种广泛应用于网页和网络应用的编程语言,尤其在客户端的交互性方面有着不可或缺的地位。本实例教程将通过100个不同的实例,帮助你深入理解和掌握JavaScript的核心概念与技术。 1. **基础语法** - ...

    IE和FireFox JavaScript的函数名的作用域的异同

    JavaScript是一种广泛使用的脚本语言,尤其在Web开发中扮演着重要角色。然而,不同的浏览器对JavaScript的实现可能存在差异,这导致了在不同浏览器下代码行为的一致性问题。本文将探讨IE(Internet Explorer)和Fire...

    深入浅析var,let,const的异同点

    var、let和const是JavaScript中声明变量的三种关键字,它们各有特点和适用场景。var关键字是早期JavaScript中唯一的变量声明方式,而let和const则是ECMAScript 6(ES6)中新增的关键字,用以解决var关键字的一些缺陷...

    java的基础学习PPT

    此外,JavaScript的变量作用域和内存管理也有其独特之处,比如全局变量和局部变量的区别,以及垃圾回收机制。理解这些概念对于编写高效且无错的JavaScript代码至关重要。虽然这个PPT可能更适合初学者,但深入学习...

    JS中var、let、const的异同之处

    在JavaScript中,`var`、`let`和`const`都是用于声明变量的关键字,但它们之间存在着重要的差异。在ES6(ECMAScript 2015)中引入的`let`和`const`,是为了弥补`var`的一些不足。 1. **var**: - **预解析与提升...

    2021-2022计算机二级等级考试试题及答案No.12.docx

    **不存在的声明方式**:“自动声明”不是VBA中变量的有效声明方式。常见的变量声明方式包括显式声明、隐式声明和强制声明。 ### 7. 数据库模型分类 **关系模型**:Access数据库属于关系型数据库,其数据组织结构...

    js.zip_C 公式计算_公式

    下面我们将深入探讨JavaScript中的公式计算以及与C语言公式计算的异同。 JavaScript是一种广泛使用的脚本语言,它在网页和服务器端都有广泛应用。在JavaScript中处理计算公式,通常涉及以下几个关键知识点: 1. **...

    $RR0IVYE(1).docx

    - **变量声明提升**:在JavaScript中,所有变量声明都会被提升到当前作用域的顶部。这意味着可以在声明之前使用变量,但是变量初始化不会被提升。 ### 类型转换 JavaScript支持多种类型转换操作,常见的包括: - ...

    jQuery-Lerning.zip_Jquery 基础教程_javascript 教程_jquery_web前端

    10. **最佳实践**:学习如何有效地组织jQuery代码,避免全局变量污染,以及何时使用jQuery与原生JavaScript相结合以提高性能,都是成为jQuery专家的必经之路。 通过阅读《jQuery经典入门教程(绝对详细).pdf》,你...

    当前流行的JavaScript代码风格指南

    全局变量命名风格在不同的指南中也有不同的推荐,Google和Crockford建议不要使用全局变量。 在函数命名方面,Google、NPM和Node.js提倡使用大写字母,但其他指南则没有具体提及。关于大括号的使用,NPM主张在行开始...

    JavaScript-Interview-Questions:用JavaScript收集了大量的技术面试和软件开发问题

    JavaScript是Web开发中不可或缺的一部分,尤其在前端领域。在面试中,JavaScript技术问题和概念的掌握程度往往是评估候选人技能的关键。以下是一些重要的JavaScript知识点,这些知识点经常在面试中出现,并且与描述...

    python与c语言的语法有哪些不一样的

    在 C 语言中,全局变量的声明可以是常量(用 `#define` 或 `const` 定义)或可变的。在 Python 中,若要在函数内部修改全局变量,必须使用 `global` 关键字声明,否则会创建一个新的局部变量。 对于初学者来说,...

    js 面试24道经典面试题总结

    - 函数在JavaScript中是如何声明的?`function`关键字、表达式函数以及箭头函数有何异同? - 如何实现函数的重载?JavaScript中是否存在真正的函数重载? - 介绍JavaScript原型链的工作原理,以及`__proto__`和`...

    todo

    - 变量:JavaScript中的变量是动态类型,使用var、let或const关键字声明,可以用来存储不同类型的数据。 - 数据类型:包括基本类型(Number、String、Boolean、Null、Undefined、Symbol)和引用类型(Object)。 ...

Global site tag (gtag.js) - Google Analytics