JavaScript声明变量时为什么要加var关键字


Posted in Javascript onSeptember 29, 2014

在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它。

var x = "XX"; 

y ="xxx";

诸如此类。这有一个问题,比如说在代码中的某一行,我想使用的一个已声明的变量x,结果由于打字或者拼写错误,这个变量被写成y了,结果相当于“隐式”声明了一个变量y,在实际编程过程中,这种错误有时比较难以发现。
当你在当前上下文内进行这种“隐式”声明时,JavaScript引擎会先在当前上下文中寻找是否之前有声明此变量,如果没有,再到上一级的上下文中去寻找,如果一直未找到,会最后在window上声明这个变量!
比如:

代码如下:

window. y = "hello"; 
function func(){ 
y = "OH, NO!!!"; 
} 
func(); 
alert(window.y); //#=> display "OH, NO!!!"

当上下文中的任意一层有这种“隐式”定义的变量时,那么该层的该变量会被修改,而不会在window上生成一个新的变量。(这种bug也挺讨厌的,尤其是封装的比较复杂的代码)
比如:

代码如下:

var x = "window.x"; 
function a() { 
var x = "a's x"; 
var b = function() { 
var c = function() { 
//no var! 
x = "c's x:"; 
}; 
alert("before c run,the b.x:" + x); 
c(); 
alert("after c run, the b.x:" + x); 
}; 
alert("a.x is:" + x); 
b(); 
alert("after b function runed, the a.x is:" + x); 
}; 
alert("before a run, window.x:" + x); 
a(); 
alert("after a run, window.x:" + x);

这里面有以下几层:window, func a, func b, func c一直作层级嵌套。window->a->b->c
window和a中,都有定义变量x,b中未定义该变量,在c中‘隐式'声明了一个x,该x最终修改了a变量的值。
牢记,在JavaScript中,声明变量,一定前面要加var .

Javascript 相关文章推荐
让广告代码不再影响你的网页加载速度
Jul 07 Javascript
JavaScript 代码压缩工具小结
Feb 27 Javascript
纯js简单日历实现代码
Oct 05 Javascript
jquery中each遍历对象和数组示例
Aug 05 Javascript
Three.js学习之文字形状及自定义形状
Aug 01 Javascript
js实现三级联动效果(简单易懂)
Mar 27 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
Nov 22 Javascript
vuejs选中当前样式active的实例
Aug 22 Javascript
vue实现自定义日期组件功能的实例代码
Nov 06 Javascript
简述ES6新增关键字let与var的区别
Aug 23 Javascript
在vue中使用echarts(折线图的demo,markline用法)
Jul 20 Javascript
JavaScript实现两个数组的交集
Mar 25 Javascript
Javascript基础知识(三)BOM,DOM总结
Sep 29 #Javascript
Javascript基础知识(二)事件
Sep 29 #Javascript
Javascript基础知识(一)核心基础语法与事件模型
Sep 29 #Javascript
Javascript表单验证要注意的事项
Sep 29 #Javascript
使用phantomjs进行网页抓取的实现代码
Sep 29 #Javascript
Javascript获取CSS伪元素属性的实现代码
Sep 28 #Javascript
js获取元素相对窗口位置的实现代码
Sep 28 #Javascript
You might like
用cookies来跟踪识别用户
2006/10/09 PHP
php与php MySQL 之间的关系
2009/07/17 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
利用php_imagick实现复古效果的方法
2016/10/18 PHP
js相册效果代码(点击创建即可)
2013/04/16 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
three.js实现炫酷的全景3D重力感应
2018/12/30 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
Python break语句详解
2014/03/11 Python
python中as用法实例分析
2015/04/30 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
python import 上级目录的导入
2020/11/03 Python
python中str内置函数用法总结
2020/12/27 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
新年寄语大全
2014/04/12 职场文书
劳动竞赛口号
2014/06/16 职场文书
团日活动总结模板
2014/06/25 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
房屋转让协议书
2014/10/18 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
2014年财务工作总结范文
2014/11/11 职场文书
农村党员干部承诺书
2015/05/04 职场文书
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫