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宝典学习笔记
Feb 07 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
Jan 15 Javascript
在表单提交前进行验证的几种方式整理
Jul 31 Javascript
js 数组操作之pop,push,unshift,splice,shift
Jan 29 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
Nov 16 Javascript
js实现从数组里随机获取元素
Jan 12 Javascript
浅谈Javascript实现继承的方法
Jul 06 Javascript
jQuery的end()方法使用详解
Jul 15 Javascript
js实现创建删除html元素小结
Sep 30 Javascript
js通过Date对象实现倒计时动画效果
Oct 27 Javascript
优雅的处理vue项目异常实战记录
Jun 05 Javascript
微信小程序实现点击空白隐藏的方法示例
Aug 13 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/09/29 PHP
php小偷相关截取函数备忘
2010/11/28 PHP
php设计模式 Singleton(单例模式)
2011/06/26 PHP
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
Javascript delete 引用类型对象
2013/11/01 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
2017/07/20 jQuery
js用类封装pop弹窗组件
2017/10/08 Javascript
Vue刷新修改页面中数据的方法
2018/09/16 Javascript
django接入新浪微博OAuth的方法
2015/06/29 Python
python中map()与zip()操作方法
2016/02/27 Python
python实现12306火车票查询器
2017/04/20 Python
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
python如何把嵌套列表转变成普通列表
2018/03/20 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
python判断数字是否是超级素数幂
2018/09/27 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
python实现H2O中的随机森林算法介绍及其项目实战
2019/08/29 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
python 模拟登陆github的示例
2020/12/04 Python
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
西安众合通用.net笔试题
2013/03/18 面试题
绘画专业自荐信
2014/07/04 职场文书
爱国主义教育演讲稿
2014/08/26 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
房屋产权证明书
2014/10/15 职场文书
试用期辞职信范文
2015/03/02 职场文书
2016党校学习心得体会
2016/01/07 职场文书