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 相关文章推荐
js中document.write的那点事
Dec 12 Javascript
jQuery点击输入框显示验证码图片
May 19 Javascript
js删除数组元素、清空数组的简单方法(必看)
Jul 27 Javascript
BootStrap表单时间选择器详解
May 09 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
Oct 24 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
Oct 26 Javascript
微信小程序wx.request实现后台数据交互功能分析
Nov 25 Javascript
vue中父子组件注意事项,传值及slot应用技巧
May 09 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
Jul 29 Javascript
高效jQuery选择器的5个技巧实例分析
Nov 26 jQuery
解决Vue 刷新页面导航显示高亮位置不对问题
Dec 25 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
Mar 10 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
全文搜索和替换
2006/10/09 PHP
smarty巧妙处理iframe中内容页的代码
2012/03/07 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
2020/08/03 PHP
jquery tools之tabs 选项卡/页签
2009/07/25 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
JS字符串函数扩展代码
2011/09/13 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
Angular4 反向代理Details实践
2018/05/30 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
简单谈谈python中的Queue与多进程
2016/08/25 Python
Python如何读取MySQL数据库表数据
2017/03/11 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
python接口自动化框架实战
2020/12/23 Python
极简的HTML5模版
2015/07/09 HTML / CSS
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
美国批发供应商:Kole Imports
2019/04/10 全球购物
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
大学学年自我鉴定
2013/10/28 职场文书
总监职责范文
2013/11/09 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
工商局个人工作总结
2015/03/03 职场文书
团组织关系介绍信
2019/06/24 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python