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 文件大小判断的实现代码
Apr 07 Javascript
基于jquery中children()与find()的区别介绍
Apr 26 Javascript
原生js做的手风琴效果的导航菜单
Nov 08 Javascript
jquery动态改变form属性提交表单
Jun 03 Javascript
JavaScript中String.prototype用法实例
May 20 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
Aug 11 Javascript
jQuery EasyUI Draggable拖动组件
Mar 01 Javascript
jQuery 实现双击编辑表格功能
Jun 19 jQuery
vue2.0实现移动端的输入框实时检索更新列表功能
May 08 Javascript
bootstrap实现点击删除按钮弹出确认框的实例代码
Aug 16 Javascript
vue引入axios同源跨域问题
Sep 27 Javascript
js动态生成表格(节点操作)
Jan 12 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
第十二节 类的自动加载 [12]
2006/10/09 PHP
用PHP和ACCESS写聊天室(十)
2006/10/09 PHP
elgg 获取文件图标地址的方法
2010/03/20 PHP
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
php中stdClass的用法分析
2015/02/27 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
非常好的js代码
2006/06/27 Javascript
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
2019/10/15 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
2020/06/05 Javascript
vue实现两个区域滚动条同步滚动
2020/12/13 Vue.js
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
Python字符串处理实现单词反转
2017/06/14 Python
python使用matplotlib库生成随机漫步图
2018/08/27 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
函授大学生自我鉴定
2014/02/05 职场文书
公司募捐倡议书
2014/05/14 职场文书
人代会标语
2014/06/30 职场文书
应届生面试求职信
2014/07/02 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python