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 checkbox(复选框) 使用集锦
Apr 28 Javascript
js操作二级联动实现代码
Jul 27 Javascript
jquery mobile实现拨打电话功能的几种方法
Aug 05 Javascript
jQuery 取值、赋值的基本方法整理
Mar 31 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
Dec 13 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
Oct 07 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
Oct 21 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
Dec 14 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
Aug 11 Javascript
Element UI 自定义正则表达式验证方法
Sep 04 Javascript
Vue 幸运大转盘实现思路详解
May 06 Javascript
vue动画—通过钩子函数实现半场动画操作
Aug 09 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
模仿OSO的论坛(二)
2006/10/09 PHP
PHP Document 代码注释规范
2009/04/13 PHP
php学习之 认清变量的作用范围
2010/01/26 PHP
用php解析html的实现代码
2011/08/08 PHP
如何设置mysql允许外网访问
2013/06/04 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
php在线解压ZIP文件的方法
2014/12/30 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
关于jquery css的使用介绍
2013/04/18 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
2018/09/30 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
python斐波那契数列的计算方法
2018/09/27 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
杭州龙健科技笔试题.net部分笔试题
2016/01/24 面试题
信息部岗位职责
2013/11/12 职场文书
剪彩仪式主持词
2014/03/19 职场文书
旅游文化节策划方案
2014/06/06 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python