JavaScript中的变量声明早于赋值分析


Posted in Javascript onMarch 01, 2012

如下

var a = 3;

实际有两个步骤:
1 初始化a为undefined
2 a赋值3

因此会出现一些“匪夷所思”的现象,即JS中变量可以先使用后声明。这在Java中是不允许的。

System.out.println(a); 
int a = 1;

编译通不过。但JS可以,如下
alert(a); 
var a;

虽然是undefined,但不会报错。说明a的确声明了,且为undefined。

如果只是“alert(a)”,没有“var a”的话JS引擎会报错的。

alert(a);

FF中如下

JavaScript中的变量声明早于赋值分析

虽然可以先使用再声明,但这样会造成赋值的效果丢失。如下

alert(a); 
var a = 1;

这次输出的仍然是undefined而非1。

又如,

alert('a' in window); // true 
var a;

虽然代码形式上写在alert后,引擎仍然先自动处理var的声明。最后输出的是true。

明白了这些就不难理解下面的代码运行结果了

if (!("a" in window)) { 
var a = 1; 
} 
alert(a);
Javascript 相关文章推荐
JavaScript版DateAdd和DateDiff函数代码
Mar 01 Javascript
javascript下拉列表中显示树形菜单的实现方法
Nov 17 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
Javascript技术栈中的四种依赖注入详解
Feb 23 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
Jul 28 Javascript
Vue.JS入门教程之列表渲染
Dec 01 Javascript
jQuery如何跳转到另一个网页 就这么简单
Dec 28 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
Jun 26 jQuery
Form表单上传文件(type="file")的使用
Aug 03 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
Oct 12 Javascript
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 Javascript
基于webpack4搭建的react项目框架的方法
Jun 30 Javascript
JavaScript中函数声明优先于变量声明的实例分析
Mar 01 #Javascript
Jquery提交表单 Form.js官方插件介绍
Mar 01 #Javascript
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
Mar 01 #Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
Mar 01 #Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
Mar 01 #Javascript
JavaScript自定义DateDiff函数(兼容所有浏览器)
Mar 01 #Javascript
JavaScript版DateAdd和DateDiff函数代码
Mar 01 #Javascript
You might like
PHP Document 代码注释规范
2009/04/13 PHP
一步一步学习PHP(2)――PHP类型
2010/02/15 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
Python2.x版本中基本的中文编码问题解决
2015/10/12 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
python3个性签名设计实现代码
2018/06/19 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
Django 实现admin后台显示图片缩略图的例子
2019/07/28 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
2020/04/12 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
Martinelli官方商店:西班牙皮鞋和高跟鞋品牌
2019/07/30 全球购物
人事专员岗位职责
2013/11/20 职场文书
幼儿园教师考核制度
2014/02/01 职场文书
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
新闻专业毕业生英文求职信
2014/03/19 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
2014年个人售房协议书
2014/10/30 职场文书
大班下学期个人总结
2015/02/13 职场文书
小学教师见习总结
2015/06/23 职场文书
redis实现排行榜功能
2021/05/24 Redis
详解PyTorch模型保存与加载
2022/04/28 Python