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 相关文章推荐
Extjs EditorGridPanel中ComboBox列的显示问题
Jul 04 Javascript
JavaScript中数组对象的那些自带方法介绍
Mar 12 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
Aug 25 Javascript
js单例模式的两种方案
Oct 22 Javascript
css+js实现部分区域高亮可编辑遮罩层
Mar 04 Javascript
js实现Select列表各项上移和下移的方法
Aug 14 Javascript
如何在JS中实现相互转换XML和JSON
Jul 19 Javascript
Ubuntu系统下Angularjs开发环境安装
Sep 01 Javascript
react.js 翻页插件实例代码
Jan 19 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
May 22 Javascript
Vue基本使用之对象提供的属性功能
Apr 30 Javascript
JavaScript实现队列结构过程
Dec 06 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 反射机制实现动态代理的代码
2008/10/22 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
PHP中overload与override的区别
2017/02/13 PHP
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
juqery 学习之五 文档处理 包裹、替换、删除、复制
2011/02/11 Javascript
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
2014/01/03 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
2018/06/29 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
2020/08/03 Javascript
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
Monnier Freres中文官网:法国领先的奢侈品配饰在线零售商
2017/11/01 全球购物
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
高一生物教学反思
2014/01/17 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
2015年超市工作总结
2015/04/09 职场文书
个人借条范本
2015/05/25 职场文书
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python
MySQL索引是啥?不懂就问
2021/07/21 MySQL
python多线程方法详解
2022/01/18 Python
Redis+AOP+自定义注解实现限流
2022/06/28 Redis
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL