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 相关文章推荐
jquery获得下拉框值的代码
Aug 13 Javascript
js取消单选按钮选中示例代码
Nov 14 Javascript
jQuery UI插件自定义confirm确认框的方法
Mar 20 Javascript
js实现的奥运倒计时时钟效果代码
Dec 09 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
Nov 02 Javascript
利用angularjs1.4制作的简易滑动门效果
Feb 28 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
May 08 Javascript
Node调用Java的示例代码
Sep 20 Javascript
微信小程序实现简单表格
Feb 14 Javascript
详解jquery和vue对比
Apr 16 jQuery
如何在项目中使用log4.js的方法步骤
Jul 16 Javascript
js实现html滑动图片拼图验证
Jun 24 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
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
js实现简单计算器
2015/11/22 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
2016/09/08 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
vue按需加载实例详解
2019/09/06 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
2020/05/09 Javascript
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
群胜软件Java笔试题
2012/09/29 面试题
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
房地产出纳岗位职责
2013/12/01 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
班主任先进事迹材料
2014/12/17 职场文书
团代会邀请函
2015/02/02 职场文书
银行催款通知书
2015/04/17 职场文书
负责培养人意见
2015/06/05 职场文书
十月围城观后感
2015/06/08 职场文书
同学会演讲稿
2019/04/02 职场文书
再次探讨go实现无限 buffer 的 channel方法
2021/06/13 Golang
React四级菜单的实现
2022/04/08 Javascript
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python