前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >全局变量的三种声明方法

全局变量的三种声明方法

作者头像
meteoric
发布于 2018-11-15 06:34:43
发布于 2018-11-15 06:34:43
1K00
代码可运行
举报
文章被收录于专栏:游戏杂谈游戏杂谈
运行总次数:0
代码可运行

全局变量有如下三种声明方法(这里以举声明FWK这个变量为例):

1、使用var直接声明  var FWK;

2、使用window.FWK = ….;

3、隐式声明全局变量(定义FWK前不加var) FWK

它们的区别在哪里呢?更提倡何种写法?

使用var 定义的变量,将被提前预解析,如下的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
alert(FWK);

FWK	= 'ddd';
</script> 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
alert(FWK);

window.FWK	= 'ddd';
</script> 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
alert(FWK);

var FWK	= 'ddd';
</script>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
其它的二种声明方法,将会被告知FWK未定义(FWK is not defined)
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
看看这三种声明的方式,是否能被for in出来:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
window.FWK = 'ddd';

for (var i in window) {
	if (i === 'FWK') {
		alert(i + '---' + window[i]);
	}	
}
</script>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
FWK	= 'ddd';

for (var i in window) {
	if (i === 'FWK') {
		alert(i + '---' + window[i]);
	}	
}
</script>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
var FWK	= 'ddd';

for (var i in window) {
	if (i === 'FWK') {
		alert(i + '---' + window[i]);
	}	
}
</script>

除了window.FWK的方式能被for in 出来,其它二种均不行。

再看看它们是否能被delete:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
var FWK	= 'ddd';

alert(	delete FWK	);

alert(FWK);
</script>

显示false ddd,说明var 声明的变量无法使用delete

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
FWK	= 'ddd';

alert(	delete FWK	);

alert(FWK);
</script>

显示true FWK未定义,说明隐式声明的全局变量可以被delete,与global对象的parseInt、escape、parseFloat等等类似,可直接被delete。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
alert(parseInt);
alert(delete parseInt);
alert(parseInt);
</script>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
window.FWK	= 'ddd';

alert(	delete FWK	);
alert(FWK);
</script>

IE下会提示

,其它浏览器Chrome、FireFox可以被删除,表现上与隐式声明的变量一致。

但IE下为何会提示对象不支持此操作呢?

根据《Javascript编程精髓和编程实践》中的说明,IE的Javascript引擎来自ActiveScript系统,而window对象来自浏览器的DOM系统,所以在IE中window.x使用delete类似于下面的操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
var div = document.createElement("div");

div.x = 'ddd';

alert(delete div.x);
</script>

当然是不可以了,而其它浏览器它们的Javascript引擎不像IE这么复杂,所以并不会出现此问题。

既然提到了delete操作符,那就再深入一点 :)

使用eval直接声明的var变量可以被delete

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
eval('var FWK = "abc";');

alert(FWK);

alert(delete FWK);

alert(FWK);
</script>

其中eval本身就属于Global对象,但对于eval代码中的函数内通过var声明的变量却不能被delete。如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
var k = eval("(function() { var FWK = 42; alert(delete FWK); return FWK; })();")

alert(k);
</script>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010-09-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
javascript模式 读书笔记一
模式是指一个通用问题的解决方案。 模式分三种 设计模式 编码模式:javascript特有的
lilugirl
2019/05/26
1K0
web前端开发初学者十问集锦(4)
利用JS来控制页面控件的显示和隐藏有两种方法,两种方法分别利用HTML的style中的两个属性,两种方法的不同之处在于控件隐藏后是否还在页面上占空位。
恋喵大鲤鱼
2018/08/03
1.3K0
JavaScript爬虫_速通物流
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站前言 – 床长人工智能教程正在上传…重新上传取消https://www.cbedai.net/gkbskc
全栈程序员站长
2022/11/01
8.4K0
JavaScript爬虫_速通物流
2020回顾-个人web分享JavaScript面试题附加回答
对于在JavaScript中的字符串,对象,数组是没有固定大小的,只有当对他们进行动态分配存储时,解释器就会分配内存来存储这些数据,当JavaScript的解释器消耗完系统中所有可用的内存时,就会造成系统崩溃。
达达前端
2021/01/05
1.7K0
Javascript中的局部变量、全局变量的详解与var、let的使用区别
Javascript中的变量定义方式有以下三种方式: 1、直接定义变量,var与let均不写;
code随笔
2020/04/14
3.2K0
Javascript中的局部变量、全局变量的详解与var、let的使用区别
前端(三)-JavaScript
JavaScript在设计之初,为了方便初学者学习,并不强制要求用 var 申明变量。这个设计错误带来了 严重的后果:如果一个变量没有通过 var 申明就被使用,那么该变量就自动被申明为全局变量;
化羽羽
2022/10/28
9050
JavaScript----ECMAScript(核心语法)
以上的sum函数,可以这样调用:sum(),没有传任何实参的时候a和b变量没有赋值,则a和b都是undefined。也可以这样调用sum(10),这样就表示a变量赋值10,b变量仍undefined。还可以这样调用:sum(1,2),这样则表示a是1,b是2。
百思不得小赵
2022/12/01
2.5K0
JavaScript----ECMAScript(核心语法)
基于JavaScript 声明全局变量的三种方式详解
JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍。 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量。该方式即为显式声明详细如下: <script> var test = 5;//全局变量 function a(){ var a = 3;//局部变量 alert(a); } function b(){ alert(test); } //a();
用户1214487
2018/01/24
2K0
搞懂JavaScript全局变量与局部变量,看这篇文章就够了
全局变量:常常定义在函数外部,拥有全局作用域,即在 JavaScript 代码的任何地方都可以访问。
AlbertYang
2020/09/08
23.5K0
JavaScript 全局变量的坑
浏览器之前一直有个奇怪的设定:带有 ID 的 DOM 元素可以直接在 JavaScript 中作为全局变量进行访问。
ConardLi
2023/08/23
2090
JavaScript 全局变量的坑
前端开发面试题答案(三)
ECMAScript 2015 新增:Symbol(创建后独一无二且不可变的数据类型 )
疯狂的技术宅
2019/03/28
7960
前端开发面试题答案(三)
《JavaScript 模式》读书笔记(2)— 基本技巧1
  这篇文章的主要内容,介绍了一些js编程中的基本技巧,其实这些技巧,大家在开发的过程中,或多或少都在使用,或者已经可以熟练的应用于自己的代码或项目中了。那么,这篇文章,就一起来回顾下这些“基本技巧”。
zaking
2020/03/16
3700
Web前端基础(05)
####溢出设置overflow visible(默认) 超出范围显示 hidden 超出范围不显示 scroll 超出范围滚动显示 ###JavaScript 作用:给页面添加动态效果 和Java没有任何关系,只是为了蹭热度 语言特点: 属于脚本语言,不需要编译直接解析执行 基于面向对象 属于弱类型语言 int x = 10; String s = “abc”; 弱类型 var x = 10; var s = “abc”; 安全性高,JavaScript语言只能访问浏览器内部的数据,浏览器以外的
海拥
2021/08/23
1.6K0
前端之JavaScript
  JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互。 JavaScript是浏览器解释执行的,前端脚本语言还有JScript(微软,IE独有),ActionScript( Adobe公司,需要插件)等。
汪凡
2019/03/01
1.9K0
【JS】JavaScript 基础入门
theme: healer-readable highlight: a11y-dark
sidiot
2023/08/26
2770
【JS】JavaScript 基础入门
前端语言基础【第二篇:JavaScript】
在js里面需要获取到input里面的值,如果把script标签放到head 里面会出现问题。
BWH_Steven
2019/08/19
2.4K0
【前端基础】JS基础学习笔记整理
JavaScript是一种基于对象的脚本编程语言,是浏览器上的程序语言。当web容器输出内容到浏览器时,这个内容是包含js源代码的,此时,JavaScript可以操作浏览器上的一切内容,在浏览器上提供用户交互,页面美化,增加页面的智能性。 JavaScript是一种基于对象的语言,通过 JavaScript代码来操作对象――访问或者设置对象的属性,编写对象的特定的事件(方法)代码。 JavaScript中的对象是由属性(properties)和方法(methods)两个基本的元素的构成的。前者是对象在实
李海彬
2018/03/27
2.3K0
【前端基础】JS基础学习笔记整理
JavaScript基本入门教程
                必须以字母或下划线开头,中间可以是数字、字符或下划线
itlemon
2020/04/03
4.1K0
【Java 进阶篇】JavaScript 中的全局对象和变量
JavaScript 是一门非常强大的编程语言,它提供了许多全局对象和变量,以便于在整个应用程序中共享数据和功能。本文将详细介绍 JavaScript 中的全局对象和变量,包括全局对象、全局变量、全局函数以及它们的用途和示例。
繁依Fanyi
2023/10/19
4700
关于JS全局变量问题
二、Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定实变量的作用域。
全栈程序员站长
2022/09/07
3.1K0
推荐阅读
相关推荐
javascript模式 读书笔记一
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验