- 浏览: 1125462 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhizhen23:
LZ 提供的链接地址失效了
重写的isPlainObject方法 -
LovingBaby:
LovingBaby 写道function fun() {}f ...
读jq之二(两种扩展) -
LovingBaby:
说的很清楚!jQuery作者为了实现简洁调用的苦心!高超的编程 ...
读jq之一(jq对象的组成) -
hard_ly:
...
将伪数组转换成数组 -
zlxzlxzlxzlxzlx:
这不能算是任意进制之间的转换,例如二十六进制、十二进制又该如何 ...
用递归实现十进制数转换N进制
变量及声明变量是一门语言最基本的概念,入门者都会很快掌握。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 } }
评论
javascript在某些浏览器下面真的很难理解一些行为,不知道这些浏览器的javascript parser 程序员都在想什么
发表评论
-
JavaScript获取图片的原始尺寸
2016-04-20 10:30 1427页面里的img元素,想要 ... -
JavaScript中奇葩的假值
2016-03-14 17:43 1004通常在以下语句结构中需要判断真假 if分支语句 whi ... -
世界上最短的数字判断代码
2016-03-14 16:21 1419我们知道JavaScript提供了typeof运算符,因此最 ... -
getBoundingClientRect在IE9/10里的bug
2015-01-12 08:30 1517getBoundingClientRect可以获得页面中某个 ... -
JavaScript中的直接量与初始器的区别
2014-11-08 06:09 1459很多代码优化及公司规范都会提到 写对象不应该 var ... -
JavaScript中的不可见数据类型
2014-11-02 11:08 1131JS提供了一些内置对象、函数和构造器供我们编程,如Math ... -
ES5严格模式
2014-10-08 18:20 1081严格模式(Strict mode)是由ECMA-262规范 ... -
JavaScript生成GUID的算法
2014-07-16 14:25 2890全局唯一标识符(GUID,Globally Unique ... -
JavaScript中点号“.”的多义性
2014-06-07 19:42 1532点号「.」在JavaScript中 ... -
冗余换性能-从Backbone的triggerEvents说开了去
2014-02-19 11:03 827Backbone是一个优秀的前端MVC库,它的代码质量必定 ... -
JavaScript中delete操作符不能删除的对象
2013-11-27 13:21 1177ES3 中,delete在8.6.2.5及11.4.1有介 ... -
JavaScript中instanceof对于不同的构造器可能都返回true
2013-11-19 11:13 1079我们知道 instanceof 运算符用来检查对象是否为某 ... -
JavaScript里模拟sleep
2013-10-16 07:52 1419有几种方式,但都不完美 一、不断循环,直到达到指定时间 ... -
参数有中包含空格且使用Post提交时须将空格转换成加号
2013-10-14 08:07 5090jQuery的serialize模块中有个r20正则 ... -
JavaScript中“基本类型”之争
2013-10-04 20:58 1010前端面试中常被问到的问题之一就是“JavaScript的基本 ... -
ES3和ES5关于计算顺序的问题(ES5先计算函数ES3则是参数)
2013-09-13 23:35 1230从cmc那看到的,分享给园友。以下是一个怪异的代码,谁 ... -
一道关于"/g"笔试题
2013-07-26 07:13 972正则里“g”表示全局(global)的意思,比如当替换字符串 ... -
JavaScript原型继承的陷阱
2013-05-27 20:51 1300JavaScript默认采用原型 ... -
JavaScript中__proto__与prototype的关系
2013-05-21 10:38 1372这里讨论下对象的内 ... -
JavaScript中__proto__与prototype的关系
2013-05-21 10:01 3这里讨论下对象的内 ...
相关推荐
主要介绍了JavaScript中声明全局变量三种方式的异同。变量及变量声明是一门语言最基本的概念,初学者都会很快掌握。需要的朋友可以过来参考下,希望对大家有所帮助
JavaScript声明全局变量访问方法 JavaScript声明全局变量访问方法 JavaScript声明全局变量访问方法 JavaScript声明全局变量访问方法
本篇文章对JavaScript中声明全局变量的三种方式进行了详细的分析介绍。需要的朋友参考下
看看有帮助,全局变量,与局部变量的差异!
在JavaScript中,全局变量有两种声明方式 使用 var 显示声明的全局变量 不使用 var 声明的隐式全局变量 ...在 js 中全局变量其实是global对象(window)的属性,因此两种方式声明的全局变量都可以通过 window 拿
JavaScript实现IFrame子窗口调用父窗口的全局变量
JavaScript全局变量的本质及页面共享问题 -跨页面访问变量的问题
JavaScript全局变量的本质及页面共享问题 -页面
javascript有两种变量:局部变量和全局变量。当然,我们这篇文章是帮助大家真正的区别这两种变量。 首先,局部变量是指只能在本变量声明的函数内部调用。全局变量时整个代码中都可以调用的变量。当然,单单从字面上...
浅谈JavaScript的全局变量与局部变量_.docx
未声明的变量称为暗示全局变量。 var a = 1; //函数体外声明的变量称为全局变量 b = 2; // 无论函数体外或函数体内未声明的变量都称为暗示全局变量 function fn() { var c = 3; //函数体内声明的变量称为局部变量 ...
Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。 Python还被语言流行指数的编译器Tiobe将它被评为最受欢迎的编程语言,20多年来首次将Python置于...
JavaScript进阶:JS的全局变量和全局函数.docx
主要介绍了JavaScript防止全局变量污染的方法,结合实例形式较为详细的总结分析了JavaScript防止全局变量污染的常用操作技巧与注意事项,需要的朋友可以参考下
vue 之使用 scss 的全局变量
在IE中进行这个测试时需要先改变IE的”最大脚本步数”: [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Styles] “MaxScriptStatements”=dword:ffffffff 这么看的话使用函数内的本地变量时效率要比用...
在JavaScript中,我们应该尽可能的用局部变量来代替全局变量,这句话所有人都知道,可是这句话是谁先说的?