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 相关文章推荐
统一接口:为FireFox添加IE的方法和属性的js代码
Mar 25 Javascript
javascript Excel操作知识点
Apr 24 Javascript
基于jquery的3d效果实现代码
Mar 23 Javascript
js控制frameSet示例
Sep 10 Javascript
javascript实现checkbox全选的代码
Apr 30 Javascript
jquery实现图片上传之前预览的方法
Jul 11 Javascript
jquery限定文本框只能输入数字(整数和小数)
Jan 08 Javascript
AngularJS 过滤器的简单实例
Jul 27 Javascript
Javascript使用uploadify来实现多文件上传
Nov 16 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
Aug 14 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
May 16 Javascript
JS对象属性的检测与获取操作实例分析
Mar 17 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常用代码
2006/11/23 PHP
php var_export与var_dump 输出的不同
2013/08/09 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
PHP 中常量的知识整理
2017/04/14 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
javascript基础知识讲解
2017/01/11 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
2017/06/04 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
vue双向数据绑定知识点总结
2018/04/18 Javascript
Jquery获取radio选中值实例总结
2019/01/17 jQuery
JavaScript中的 new 命令
2019/05/22 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python多线程实例教程
2014/09/06 Python
在Python中操作日期和时间之gmtime()方法的使用
2015/05/22 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
2019/07/16 Python
Python数据相关系数矩阵和热力图轻松实现教程
2020/06/16 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
EJB timer的种类
2014/10/28 面试题
大学生的自我鉴定范文
2014/01/21 职场文书
仲裁协议书
2014/09/26 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android
Python标准库pathlib操作目录和文件
2021/11/20 Python
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS