JavaScript声明全局变量三种方式的异同
来源:互联网 发布:爱丽丝门罗知乎 编辑:程序博客网 时间:2024/05/17 13:41
JavaScript中声明变量也是如此,很简单var(关键字)+变量名(标识符)。
方式1
1
2
var
test;
var
test = 5;
需注意的是该句不能包含在function内,否则是局部变量。这是第一种方式声明全局变量。
方式2
1
test = 5;
没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test。即使该语句是在一个function内,当该function被执行后test变成了全局变量。
方式3
1
2
window.test;
window.test = 5;
这种方式经常被用到一个匿名函数执行后将一些函数公开到全局。 如JQuery1.5中最末一句
1
window.jQuery = window.$ = jQuery;
如果只是使用变量test,那么三种方式将没有什么区别。比如:alert(test) 都将显示5。但三种方式在某些情况下还是有区别的。分别按以上三种方式声明三个变量a1,a2,a3。
1
2
3
a1 = 11;
var
a2 = 22;
window.a3 = 33;
1,for in window
1
2
3
4
5
for
(a
in
window){
if
(a==
'a1'
||a==
'a2'
||a==
'a3'
){
alert(a)
}
}
IE6/7/8/9:只弹出了a3,说明通过第一,二种方式声明的全局变量通过for in window时将获取不到。
Firefox/Chrome/Safari/Opera :a1,a2,a3都弹出了,说明三种方式声明的全局变量,通过for in window时都能获取到。
2,delete
1
2
3
4
5
6
7
8
9
10
11
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'
)}
结果如下
可以看到,
1,delete a2所有浏览器都是false。即通过var声明的变量无法删除,所有浏览器表现一致。这在犀牛书上也有提到。
2,通过window.a3方式声明的全局变量在IE6/7/8中均无法删除,IE9/Firefox/Chrome/Safari/Opera中却可以。
虽然有以上两点不同,但当用in运算时,都返回true。
1
2
3
alert(
'a1'
in
window);
//true
alert(
'a2'
in
window);
//true
alert(
'a3'
in
window);
//true
用with打开对象window闭包时,所有浏览器也表现一致,如下
1
2
3
4
5
6
7
8
9
10
11
with
(window){
if
(a1){
alert(a1);
//11
}
if
(a2){
alert(a2);
//22
}
if
(a3){
alert(a3);
//33
}
}
0 0
- JavaScript声明全局变量三种方式的异同javascript
- JavaScript声明全局变量三种方式的异同
- JavaScript声明全局变量三种方式的异同
- JavaScript声明全局变量三种方式的异同
- JavaScript中声明全局变量三种方式的异同
- JavaScript声明全局变量三种方式的异同
- JavaScript声明全局变量三种方式的异同
- JavaScript学习笔记-JavaScript声明全局变量三种方式的异同
- Javascript全局变量的三种声明方式
- 基于JavaScript的三种声明全局变量方式介绍
- 基于JavaScript 声明全局变量的三种方式详解
- JavaScript 声明全局变量的三种方式详解
- 基于JavaScript 声明全局变量的三种方式详解
- 基于JavaScript 声明全局变量的三种方式详解
- JS 声明全局变量的三种方式
- 声明全局变量的三种方式
- JavaScript中声明全局变量的三种方式(包括显示和隐式)
- javascript 函数声明的三种方式
- sigsuspend 函数使用 及与 pause 区别
- 提高C++代码质量 - [085]了解指针参数传递内存中的玄机
- android:largeHeap="true"的作用
- 面试里遇到的结构体个和联合体的题目
- Android Studio系列教程四--Gradle基础
- JavaScript声明全局变量三种方式的异同
- 常见hash算法
- Java多线程开发系列之四:玩转多线程(线程的控制2)
- C语言itoa()函数和atoi()函数详解(整数转字符C实现)
- 关于 U 盘的一些知识
- linux(centos7) mongodb 安装配置
- 单链表反转
- HDU 2082 找单词(母函数基础)
- mysql备份,备份数据,数据库,表结构