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处理表格对table进行修饰
May 26 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
Jun 19 Javascript
简单实现限制uploadify上传个数
Nov 16 Javascript
纯js代码实现简单计算器
Dec 02 Javascript
jQuery前端开发35个小技巧
May 24 Javascript
jQuery实现自动调用和触发某个事件的方法
Nov 18 Javascript
jquery实现简单的瀑布流布局
Dec 11 Javascript
微信小程序网络请求wx.request详解及实例
May 18 Javascript
详解vue 模版组件的三种用法
Jul 21 Javascript
微信小程序滚动Tab实现左右可滑动切换
Aug 17 Javascript
聊聊JS动画库 Velocity.js的使用
Mar 13 Javascript
vue技术分享之你可能不知道的7个秘密
Apr 09 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
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
根德YB400的电路分析
2021/03/02 无线电
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
php文件夹与文件目录操作函数介绍
2013/09/09 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
基于jquery的模态div层弹出效果
2010/08/21 Javascript
jquery ajax例子返回值详解
2012/09/11 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
js style动态设置table高度
2014/10/21 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
jquery实现拖动效果
2016/08/10 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
微信小程序使用swiper组件实现类3D轮播图
2018/08/29 Javascript
原生js检测页面加载完毕的实例
2018/09/11 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
Python绘制3D图形
2018/05/03 Python
Django 开发环境配置过程详解
2019/07/18 Python
Selenium启动Chrome时配置选项详解
2020/03/18 Python
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
cf战队收人广告词
2014/03/14 职场文书
后进生评语大全
2015/01/04 职场文书
Python实现学生管理系统(面向对象版)
2021/06/24 Python