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 相关文章推荐
使用js获取QueryString的方法小结
Feb 28 Javascript
ExtJS4 表格的嵌套 rowExpander应用
May 02 Javascript
jQuery绑定事件不执行但alert后可以正常执行
Jun 03 Javascript
百度地图自定义控件分享
Mar 04 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
Mar 13 Javascript
JavaScript判断是否为数字的4种方法及效率比较
Apr 01 Javascript
基于jQuery实现自动轮播旋转木马特效
Nov 02 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
Mar 09 Javascript
Bootstrap Table使用整理(三)
Jun 09 Javascript
基于JS实现带动画效果的流程进度条
Jun 01 Javascript
JavaScript ES6中的简写语法总结与使用技巧
Dec 30 Javascript
基于JavaScript实现简单抽奖功能代码实例
Oct 20 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
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
jQuery学习笔记之Helloworld
2010/12/22 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
python 移除字符串尾部的数字方法
2018/07/17 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
医药专业应届毕业生求职信范文
2014/01/01 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
入党群众意见范文
2015/06/02 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
MySQL表类型 存储引擎 的选择
2021/11/11 MySQL