探讨JavaScript中声明全局变量三种方式的异同
变量及变量声明是一门语言最基本的概念,初学者都会很快掌握。JavaScript中声明变量也是如此,很简单var(关键字)+变量名(标识符)。
方式1
var test;
var test = 5;需注意的是该句不能包含在function内,否则是局部变量。这是第一种方式声明全局变量。
方式2
test = 5;
没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test。即使该语句是在一个function内,当该function被执行后test变成了全局变量。
方式3
window.test;
window.test = 5;这种方式经常被用到一个匿名函数执行后将一些函数公开到全局。 如JQuery1.5中最末一句
window.jQuery = window.$ = jQuery;
如果只是使用变量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/9:只弹出了a3,说明通过第一,二种方式声明的全局变量通过for in window时将获取不到。
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')}
结果如下
可以看到,
1,delete a2所有浏览器都是false。即通过var声明的变量无法删除,所有浏览器表现一致。这在犀牛书上也有提到。
2,通过window.a3方式声明的全局变量在IE6/7/8中均无法删除,IE9/Firefox/Chrome/Safari/Opera中却可以。
虽然有以上两点不同,但当用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有两种变量:局部变量和全局变量.当然,我们这篇文章是帮助大家真正的区别这两种变量. 首先,局部变量是指只能在本变量声明的函数内部调用.全局变量时整个代码中都可以调用的变量.当然,单单从字面上理解肯定是不清楚的,下面我详细的介绍下: 大家都知道,变量是需要用var关键字声明的.但是javascript中也可以隐式的使用变量,就是不用声明,直接使用.而且,千万注意,javascript把隐式声明的变量总是当成全局变量来使用的. 例如: 复制代码 代码如下: function my
-
javascript全局变量封装模块实现代码
下面的代码是我的测试代码,注释很重要: 复制代码 代码如下: /*global window,jQuery,validate_email,masterUI,$,rest*/ /** Enable ECMAScript "strict" operation for this function. See more: * http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ * http://stackoverflow.c
-
Javascript全局变量var与不var的区别深入解析
相信你对全局变量一定不陌生,在函数作用域里用a=1这种形式定义的变量会是一个全局变量,在全局作用域里,用下面3种形式都可以创建对全局可见的命名: 复制代码 代码如下: <script>var a = 1;b = 2;window.c = 3;</script> 对于b=2这种方式, 它其实和c是一样的,在执行这个赋值语句的时候,会沿着作用域链寻找名字叫做b的变量,一直找到作用域链的顶端还没有找到,于是给window添加一个属性b然后赋值. var与不var有两个区别: 1 var的
-
跟我学习javascript的全局变量
一.尽量少用全局对象 全局变量的问题在于,你的JavaScript应用程序和web页面上的所有代码都共享了这些全局变量,他们住在同一个全局命名空间,所以当程序的两个不同部分定义同名但不同作用的全局变量的时候,命名冲突在所难免. web页面包含不是该页面开发者所写的代码也是比较常见的,例如: 第三方的JavaScript库 广告方的脚本代码 第三方用户跟踪和分析脚本代码 不同类型的小组件,标志和按钮 比方说,该第三方脚本定义了一个全局变量,叫做result:接着,在你的函数中也定义一个名为resu
-
javascript中运用闭包和自执行函数解决大量的全局变量问题
但是从全局看来,这样会导致出现一些让我们难以掌控的情况的出现:变量同名.多个函数共用一个全局变量后的值的变换--等等.所以,有时候,对于一些简单的全局变量,我们可以通过另一种方式来处理--用自执行函数+闭包的方法来解: 比如:我们要在网页加载时给出一个提示,在网页关闭时给出另一个提示 下面的代码,实现了以上功能 复制代码 代码如下: var msg1 = "欢迎光临!"; // 定义一个全局变量 var msg2 = "再见!" //定了另一个全局变量 window
-
javascript 用局部变量来代替全局变量第1/2页
为什么要这么做?有什么根据么?不这么做,对性能到底能带来多大的损失?本文就来探讨这些问题的答案,从根本上了解变量的读写性能都和哪些因素有关. 著作权声明 本文译自 Nicholas C. Zakas 于2009年2月10日在个人网站上发表的<JavaScript Variable Performance>.原文是唯一的正式版,本文是经过原作者(Nicholas C. Zakas)授权的简体中文翻译版(Simplified Chinese Translation).译者(明达)在翻
-
基于JavaScript 声明全局变量的三种方式详解
JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍. 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量.该方式即为显式声明详细如下: <script> var test = 5;//全局变量 function a(){ var a = 3;//局部变量 alert(a); } function b(){ alert(test); } //a();//调用a方法,那么方法里面的内容才会执行 //b(
-
JavaScript中全局变量、函数内变量以及常量表达式的效率测试
var r, s = "this is a very very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong string", x = /^\s+|\s+$/g; document.writeln("字符串测试 "); (function(){ document.write("全局->全局:"); var t = new Date(); for(
-
javascript(jquery)利用函数修改全局变量的代码
我是将当前页用一个全局变量存储.同时在"最后一页"链接里单击方法调用一个函数自动去修改页数为最后一页,然后再调用载入评论的方法. 可是我发现点击"最后一页"第一次的时候系统没反应,再点击一次就抓去最后一页的资料了! 要说全局变量没改,应该是改了,就仿佛改了页数而载入评论的方法失效了一样. 代码如下: 复制代码 代码如下: var page = 1; //初始化页数为第一页 var str = ""; $(document).ready(funct
-
探讨JavaScript中声明全局变量三种方式的异同
变量及变量声明是一门语言最基本的概念,初学者都会很快掌握.JavaScript中声明变量也是如此,很简单var(关键字)+变量名(标识符). 方式1 var test;var test = 5;需注意的是该句不能包含在function内,否则是局部变量.这是第一种方式声明全局变量. 方式2 test = 5;没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test.即使该语句是在一个function内,当该function被执行后test变成了全局变量. 方式3 window
-
实现JavaScript中继承的三种方式
一.原型链继承 在原型链继承方面,JavaScript与java.c#等语言类似,仅允许单父类继承.prototype继承的基本方式如下: 复制代码 代码如下: function Parent(){} function Child(){} Child.prototype = new Parent(); 通过对象Child的prototype属性指向父对象Parent的实例,使Child对象实例能通过原型链访问到父对象构造所定义的属性.方法等. 构造通过原型链链接了父级对象,是否就意味着完成了对象
-
javascript函数命名的三种方式及区别介绍
javascript函数命名的三种方式及区别介绍 第一 复制代码 代码如下: function fn(val1,val2) { alert(val1+val2); } fn(1,2); 第二 复制代码 代码如下: var fn=function() { alert(val1+val2); } fn(1,2); 第三 复制代码 代码如下: var fn=new Function("alert(val1+val2)"); fn(1,2); 上面三种方式逻辑上是等价的,但是还是有点小区别:区
-
C#中sqlDataRead 的三种方式遍历读取各个字段数值的方法
数据库的查询分析器中写上如下代码: create table studentname ( id int primary key identity(1,1) not null , name nvarchar(500) not null ) insert into studentname values('long') insert into studentname values('long') insert into studentname values('long') insert into st
-
前端vue中文件下载的三种方式汇总
目录 前端vue中文件下载的三种方式 附:vue实现图片或文件下载功能实例 总结 前端vue中文件下载的三种方式 第一种方式是前端创建超链接,通过a标签的链接向后端服务发get请求,接收后端的文件流,非常简单: <a :href='"/user/downloadExcel"' >下载模板</a> 另一种情况是创建div标签,动态创建a标签: <div name="downloadfile" onclick="downloadE
-
Spring MVC中异常处理的三种方式
前言 在 SpringMVC, SpringBoot 处理 web 请求时, 若遇到错误或者异常,返回给用户一个良好的错误信息比 Whitelabel Error Page 好的多. SpringMVC 提供了三种异常处理方式, 良好的运用它们可以给用户提供可读的错误信息. 1. 实现 HandlerExceptionResolver public class AppHandlerExceptionResolver implements HandlerExceptionResolver { @O
-
详细分析Javascript中创建对象的四种方式
前言 使用Javascript创建对象的方式有很多,现在就来列举一下其中的四种方式,并且罗列出了每种方式的优缺点,可以让大家进行选择使用,下面来看看. 工厂模式 function createPerson(name, age){ var obj = new Object(); obj.name = name; obj.age = age; return obj; //一定要返回,否则打印undefined:undefined } var person1 = new createPerson('Y
-
JavaScript数值转换的三种方式总结
在JavaScript中,数值转换一般有三种方式: 一.Number(param)函数:param可以用于任何数据类型 1.1 param是Boolean值,true和false分别转换为1和0: 1.2 param是数值,只是简单的传入和返回 1.3 param是null和undefined,分别返回0和NaN 1.4 param是字符串,遵循下列规则: 1.4.1 如果字符串中只包含数字,则转换为十进制,前导0被忽略: 1.4.2 如果字符串中包含有效的浮点数格式,则返回对应的浮点数值,前导
-
JavaScript接口的实现三种方式(推荐)
Javascript模仿接口可以有三种方式:1.注释法 2.检查属性法 3.鸭式辨形法 1.注释法:此方法属于程序文档范畴,对接口的继承实现完全依靠程序员自觉 /* interface People{ function createHead(); function createBody(); } */ var woman = function(name){ //implements People interface this.name = name; } woman.prototype.show
-
JavaScript 定义function的三种方式小结
(1)声明一个表达式变量,并定义该变量的表达式.如: 复制代码 代码如下: var func = function() { /*body code*/ } (2) 定义一个function表达式,并指定该表达式的标识.如: 复制代码 代码如下: function func() { //body code } (3) 使用JavaScript内置Function对象构造.如: 复制代码 代码如下: var func = new Function("/*parameters*/",&quo
随机推荐
- Aut2Exe编译au3脚本为可执行文件
- 一个友好的.改善的 Object.prototype.toString的实现
- 详解Springboot配置文件的使用
- java HashMap 的工作原理详解
- Python实例分享:快速查找出被挂马的文件
- Bootstrap布局组件教程之Bootstrap下拉菜单
- .NET笔记之:Delegate内部原理的分析
- Android RecyclerView滑动删除和拖动排序
- Shell脚本中非交互式修改密码的两种方法
- jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
- SQLSERVER中得到执行计划的两种方式
- 通过jquery-ui中的sortable来实现拖拽排序的简单实例
- jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
- js兼容火狐显示上传图片预览效果的方法
- javascript实现鼠标移到Image上方时显示文字效果的方法
- 微信小程序 switch组件详解及简单实例
- 金山反病毒20050115_日报
- 深入IComparable与IComparer的排序实例详解
- iOS-Mac远程连接控制Window
- 分数霸榜! python助你微信跳一跳拿高分