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的动态创建表格的插件
Apr 05 Javascript
javascript验证身份证完全方法具体实现
Nov 18 Javascript
js的alert样式如何更改如背景颜色
Jan 22 Javascript
jquery的父子兄弟节点查找示例代码
Mar 03 Javascript
javascript中的正则表达式使用详解
Aug 30 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
Sep 01 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
Oct 22 Javascript
基于JavaScript实现动态添加删除表格的行
Feb 01 Javascript
学习使用jQuery表单验证插件和日历插件
Feb 13 Javascript
Node.js服务器开启Gzip压缩教程
Aug 11 Javascript
利用纯JS实现像素逐渐显示的方法示例
Aug 14 Javascript
vue ssr服务端渲染(小白解惑)
Nov 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
如何给phpadmin一个保护
2006/10/09 PHP
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
php全局变量和类配合使用深刻理解
2013/06/05 PHP
YII框架常用技巧总结
2019/04/27 PHP
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
javascript demo 基本技巧
2009/12/18 Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
利用腾讯的ip地址库做ip物理地址定位
2010/07/24 Javascript
Javascript 判断是否存在函数的方法
2013/01/03 Javascript
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
Python列表切片用法示例
2017/04/19 Python
Pycharm设置界面全黑的方法
2018/05/23 Python
浅谈flask源码之请求过程
2018/07/26 Python
对pandas通过索引提取dataframe的行方法详解
2019/02/01 Python
Skyscanner香港:机票比价, 平机票和廉价航空机票预订
2020/02/07 全球购物
市场营销专业应届生自荐信
2014/06/19 职场文书
个性车贴标语
2014/06/24 职场文书
园林技术专业求职信
2014/07/28 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
2015年扫黄打非工作总结
2015/05/13 职场文书
Python实现聚类K-means算法详解
2022/07/15 Python