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 相关文章推荐
cument.execCommand()用法深入理解
Dec 04 Javascript
JavaScript运算符小结
Jun 03 Javascript
JavaScript中的bold()方法使用详解
Jun 08 Javascript
node.js微信公众平台开发教程
Mar 04 Javascript
Vue-Router进阶之滚动行为详解
Sep 13 Javascript
JavaScript伪数组用法实例分析
Dec 22 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
Jun 08 Javascript
通过jquery的ajax请求本地的json文件方法
Aug 08 jQuery
Bootstrap Table列宽拖动的方法
Aug 15 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
Apr 26 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
Jun 24 Javascript
VsCode里的Vue模板的实现
Aug 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
PHP var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
php实现留言板功能(代码详解)
2017/03/28 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
js/html光标定位的实现代码
2013/09/23 Javascript
jquery 快速回到页首的方法
2013/12/05 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
2014/05/12 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
Vue中添加手机验证码组件功能操作方法
2017/12/07 Javascript
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
python对字典进行排序实例
2014/09/25 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
类的返射机制中的包及核心类
2016/09/12 面试题
岗位职责风险点
2014/03/12 职场文书
带病坚持工作事迹
2014/05/03 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
2014全年工作总结
2014/11/27 职场文书
端午节寄语2015
2015/03/23 职场文书
2015年教学工作总结
2015/04/02 职场文书
教育教学工作反思
2016/02/24 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers