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 相关文章推荐
jQuery的Ajax时无响应数据的解决方法
May 25 Javascript
jquery 回车事件实现代码
Aug 23 Javascript
jQuery的选择器中的通配符使用介绍
Mar 20 Javascript
JavaScript编程的单例设计模讲解
Nov 10 Javascript
JavaScript操作HTML DOM节点的基础教程
Mar 11 Javascript
解析ajaxFileUpload 异步上传文件简单使用
Dec 30 Javascript
Javascript中的prototype与继承
Feb 06 Javascript
JS简单实现获取元素的封装操作示例
Apr 07 Javascript
Node+Express+MongoDB实现登录注册功能实例
Apr 23 Javascript
vue2 router 动态传参,多个参数的实例
Nov 10 Javascript
Javascript的console['']常用输入方法汇总
Apr 26 Javascript
angular 服务随记小结
May 06 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
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
php array的学习笔记
2012/05/16 PHP
新浪SAE搭建PHP项目教程
2015/01/28 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
2013/11/23 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
jQuery实现点击图标div循环放大缩小功能
2018/09/30 jQuery
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
创建nuxt.js项目流程图解
2020/03/13 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
2020/07/24 Javascript
原生JS实现拖拽效果
2020/12/04 Javascript
跟老齐学Python之不要红头文件(2)
2014/09/28 Python
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
Python列表(List)知识点总结
2019/02/18 Python
python3.8与pyinstaller冲突问题的快速解决方法
2020/01/16 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
微软加拿大官方网站:Microsoft Canada
2019/04/28 全球购物
公司活动邀请函
2014/01/24 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
2014年度思想工作总结
2014/11/27 职场文书
小学班主任评语
2014/12/29 职场文书
防溺水主题班会教案
2015/08/12 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python
python中pymysql包操作数据库方法
2022/04/19 Python