JavaScript声明全局变量三种方式的异同
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);//truealert('a2' in window);//truealert('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 } } |
JavaScript声明全局变量三种方式的异同的更多相关文章
- JavaScript事件处理的三种方式(转)
一.什么是JavaScript事件? 事件(Event)是JavaScript应用跳动的心脏,也是把所有东西粘在一起的胶水,当我们与浏览器中Web页面进行某些类型的交互时,事件就发生了. 事件可能是用 ...
- entity framework 数据加载三种方式的异同(延迟加载,预加载,显示加载)
三种加载方式的区别 显示加载: 显示加载
- 【centos6】给php命令设置全局变量三种方式
方法一:直接运行命令export PATH=$PATH:/usr/local/webserver/php/bin 和 export PATH=$PATH:/usr/local/webserver/my ...
- js函数声明的三种方式
1.直接声明 function box(num1,num2){ return num1+num2;}alert(box(1,2)); 2.使用变量初始化 var box2 = function(num ...
- Javascript 创建对象的三种方式
function createPerson(name, qq) //工厂方式 { //在工厂里创建个对象 var obj=new Object(); obj.name=name; obj.qq=qq; ...
- JavaScript声明全局变量的三种方式
JavaScript声明全局变量的三种方式 JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍. 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为 ...
- JavaScript 基础——使用js的三种方式,js中的变量,js中的输出语句,js中的运算符;js中的分支结构
JavaScript 1.是什么:基于浏览器 基于(面向)对象 事件驱动 脚本语言 2.作用:表单验证,减轻服务器压力 添加野面动画效果 动态更改页面内容 Ajax网络请求 () 3.组成部分:ECM ...
- 第十篇----------javascript函数的三种定义方式及区别
javascript定义函数有3种方式: //3种函数定义方式,前两种常用 /** * 1,function 语句式 * 形式:句子 * 名称:有名 * 性质:静态 * 解析时机:优先解析 * 作用域 ...
- js声明变量的三种方式
JS 声明变量的三种方式 (1)使用变量步骤:a.声明-->b.赋值-->3.调用 正确用法: <script type="text/javascript"> ...
随机推荐
- Linux chmod命令
chmod用于管理文件或目录的权限,文件或目录权限的控制分别以读取(r).写入(w).执行(x)3种 可读可写可执行,抽象的用二进制来表示 1 代表拥有该权限,0 代表没有该权限,这样我们就可以看到 ...
- java-mybaits-00601-查询缓存-一级缓存、二级缓存
1.什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存. 在操作数据库时需要构造 sql ...
- 【转载】ARM MMU详解
一.MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以 ...
- linux内核源代码、配置与编译
内核源代码下载:www.kernel.org Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具可读性. linux内核代码最好不要在windows ...
- Way to tmux
1. tmux ls: 显示所有会话(OR: Ctrl-b s)2. tmux new -s session-name: 新建会话3. 可以简单地输入tmux a命令,这样可以接入第一个可用的会话:t ...
- 爬虫-Beautiful Soup模块
阅读目录 一 介绍 二 基本使用 三 遍历文档树 四 搜索文档树 五 修改文档树 六 总结 一 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通 ...
- 在Idea中连接数据库并生成实体类(mybatis逆向生成实体类)
1.连接数据库 (1)按下图 , 点击view-----选择tool windows----------选择database并点击 (2)弹出Database窗口 点击加号------------选 ...
- 20. Valid Parentheses(括号匹配,用桟)
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- 简单的linux压力测试工具webbench
wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz tar zxvf webbench-1.5.tar.gz cd we ...
- 前端学习之NaN浅析
在学习Java集合的时候遇到了Float.isNaN(float)函数,点进去一看就不理解了,函数实现如下: public static boolean isNaN(float v) { return ...