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 相关文章推荐
Jquery ajaxsubmit上传图片实现代码
Nov 04 Javascript
js 优化次数过多的循环 考虑到性能问题
Mar 05 Javascript
JavaScript高级程序设计 阅读笔记(十七) js事件
Aug 14 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
Aug 22 Javascript
javascript中的void运算符语法及使用介绍
Mar 10 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
Jan 10 Javascript
给应用部分的js代码设定一个统一的入口
Jun 15 Javascript
超赞的jQuery图片滑块动画特效代码汇总
Jan 25 Javascript
js接收并转化Java中的数组对象的方法
Aug 11 Javascript
javascript监听页面刷新和页面关闭事件方法详解
Jan 09 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
Nov 01 Javascript
js实现列表按字母排序
Aug 11 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开发制作一个简单的活动日程表Calendar
2016/06/20 PHP
PHP实现随机发扑克牌
2020/04/22 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
新鲜出炉的js tips提示效果
2011/04/03 Javascript
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
2017/07/19 jQuery
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
10个经典的网页鼠标特效代码
2018/01/09 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
es6新特性之 class 基本用法解析
2018/05/05 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
python使用matplotlib画饼状图
2018/09/25 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
实时获取Python的print输出流方法
2019/01/07 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
Python计算IV值的示例讲解
2020/02/28 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
Python Web项目Cherrypy使用方法镜像
2020/11/05 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
社区包粽子活动方案
2014/01/21 职场文书
《赵州桥》教学反思
2014/02/17 职场文书
安全生产月演讲稿
2014/05/09 职场文书
SQL之各种join小结详细讲解
2021/08/04 MySQL