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 加载时自动调整图片大小
May 28 Javascript
IE php关于强制下载文件的代码
Aug 23 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
Sep 06 Javascript
javascript中将Object转换为String函数代码 (json str)
Apr 29 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
Nov 17 Javascript
jquery重复提交请求的原因浅析
May 23 Javascript
JavaScript 学习笔记之语句
Jan 14 Javascript
Ajax使用原生态JS验证用户名是否存在
May 26 Javascript
Javascript之面向对象--封装
Dec 02 Javascript
JS选取DOM元素常见操作方法实例分析
Dec 10 Javascript
vue+eslint+vscode配置教程
Aug 09 Javascript
手把手带你入门微信小程序新框架Kbone的使用
Feb 25 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
thinkphp浏览历史功能实现方法
2014/10/29 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
2014/10/30 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
JS实现页面打印功能
2017/03/16 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
js+SVG实现动态时钟效果
2018/07/14 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
JavaScript计算出两个数的差值
2020/03/19 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
Python爬虫代理IP池实现方法
2017/01/05 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
类和结构的区别
2012/08/15 面试题
工商管理实习生自我鉴定范文
2013/12/18 职场文书
村委会贫困证明
2014/01/14 职场文书
就业协议书范本
2014/04/11 职场文书
班长演讲稿范文
2014/04/24 职场文书
感恩的演讲稿
2014/05/06 职场文书
推荐信格式要求
2014/05/09 职场文书
幼儿教师师德承诺书
2014/05/23 职场文书
房产授权委托书范本
2014/09/22 职场文书
社会实践活动总结格式
2015/05/11 职场文书
背起爸爸上学观后感
2015/06/08 职场文书
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python