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 相关文章推荐
JavaScript语法着色引擎(demo及打包文件下载)
Jun 13 Javascript
csdn 博客中实现运行代码功能实现
Aug 29 Javascript
精通JavaScript 纠正 cleanWhitespace函数
Mar 11 Javascript
zTree插件之单选下拉菜单实例代码
Nov 07 Javascript
js获取url中指定参数值的示例代码
Dec 14 Javascript
js打开新窗口方法整理
Feb 17 Javascript
详解JS函数重载
Dec 04 Javascript
JavaScript实现的浮动层框架用法实例分析
Oct 10 Javascript
果断收藏9个Javascript代码高亮脚本
Jan 06 Javascript
Angular CLI 安装和使用教程
Sep 13 Javascript
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
Sep 22 Javascript
详解Vue的sync修饰符
May 15 Vue.js
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读取文件并可支持远程文件的代码分享
2012/10/03 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
jquery中获取id值方法小结
2013/09/22 Javascript
javascript几个易错点记录
2014/11/26 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
JavaScript获取两个数组交集的方法
2015/06/09 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
Bootstrap Chart组件使用教程
2016/04/28 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
微信小程序如何刷新当前界面的实现方法
2019/06/07 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
python抽取指定url页面的title方法
2018/05/11 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
详解python和matlab的优势与区别
2019/06/28 Python
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
Canvas 像素处理之改变透明度的实现代码
2019/01/08 HTML / CSS
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
国培教师自我鉴定
2014/02/12 职场文书
餐厅销售主管职责范本
2014/02/19 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers