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的load函数动态加载其它页面的内容的实现代码
Dec 14 Javascript
js对数字的格式化使用说明
Jan 12 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
Mar 12 Javascript
JS中getYear()和getFullYear()区别分析
Jul 04 Javascript
JS+CSS实现六级网站导航主菜单效果
Sep 28 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
Nov 24 Javascript
Javascript BOM学习小结(六)
Nov 26 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
Dec 27 Javascript
vue.js项目中实用的小技巧汇总
Nov 29 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
Dec 06 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
Jul 12 jQuery
JS实现数组去重的11种方法总结
Apr 04 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
使用PHP 5.0创建图形的巧妙方法
2010/10/12 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
php多进程应用场景实例详解
2019/07/22 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
nicejforms——美化表单不用愁
2007/02/20 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
js如何获取file控件的完整路径具体实现代码
2013/05/15 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
Python多进程机制实例详解
2015/07/02 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
Python实现比较扑克牌大小程序代码示例
2017/12/06 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
Python实现的简单计算器功能详解
2018/08/25 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
python3使用matplotlib绘制条形图
2020/03/25 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
Python 存取npy格式数据实例
2020/07/01 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
软件设计的目标是什么
2016/12/04 面试题
新驾驶员个人自我评价
2014/01/03 职场文书
承诺书范文
2014/06/03 职场文书
文明礼仪标语
2014/06/13 职场文书
恰同学少年观后感
2015/06/08 职场文书
领导视察通讯稿
2015/07/18 职场文书
redis cluster支持pipeline的实现思路
2021/06/23 Redis