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 相关文章推荐
Mootools 1.2教程 Tooltips
Sep 15 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
Jan 13 Javascript
js修改地址栏URL参数解决url参数问题
Dec 15 Javascript
js浮点数精确计算(加、减、乘、除)
Dec 26 Javascript
使用javascript控制cookie显示和隐藏背景图
Feb 12 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
Sep 16 Javascript
JavaScript中省略元素对数组长度的影响
Oct 26 Javascript
Vue.js手风琴菜单组件开发实例
May 16 Javascript
Vue-cli项目获取本地json文件数据的实例
Mar 07 Javascript
vue中keep-alive的用法及问题描述
May 15 Javascript
node.js 模块和其下载资源的镜像设置的方法
Sep 06 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
Oct 17 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
PHP $_FILES函数详解
2011/03/09 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
PHP 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
php实现分页显示
2015/11/03 PHP
php生成txt文件实例代码介绍
2016/04/28 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
Angularjs之filter过滤器(推荐)
2016/11/27 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
python语言中with as的用法使用详解
2018/02/23 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
使用celery和Django处理异步任务的流程分析
2020/02/19 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
2013年大学生的自我鉴定
2013/10/24 职场文书
论文评语大全
2014/04/29 职场文书
校车安全责任书
2014/08/25 职场文书
2019年年中职场激励人心语录30条
2019/08/07 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
python小程序之飘落的银杏
2021/04/17 Python
使用refresh_token实现无感刷新页面
2022/04/26 Javascript