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 相关文章推荐
推荐30个新鲜出炉的精美 jQuery 效果
Mar 26 Javascript
js验证输入是否为手机号码或电话号码示例
Dec 30 Javascript
绑定回车enter事件代码
May 18 Javascript
Angularjs实现分页和分页算法的示例代码
Dec 23 Javascript
微信小程序 地图map实例详解
Jun 07 Javascript
Angular2.0实现modal对话框的方法示例
Feb 18 Javascript
基于jQuery实现的设置文本区域的光标位置
Jun 15 jQuery
JS与jQuery判断文本框还剩多少字符可以输入的方法
Sep 01 jQuery
AngularJs返回前一页面时刷新一次前面页面的方法
Oct 09 Javascript
JQuery判断radio单选框是否选中并获取值的方法
Jan 17 jQuery
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
Apr 30 Javascript
vue3.0实现插件封装
Dec 14 Vue.js
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不用正则采集速度探究总结
2008/03/24 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
怎么清空javascript数组
2013/05/11 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
JS实现3D图片旋转展示效果代码
2015/09/22 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
2017/09/14 Javascript
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
javascript执行上下文、变量对象实例分析
2020/04/25 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
python实现点对点聊天程序
2018/07/28 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
2019/10/11 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
增大python字体的方法步骤
2020/07/05 Python
Python如何操作docker redis过程解析
2020/08/10 Python
Python进行统计建模
2020/08/10 Python
西班牙床垫网上商店:Colchones.es
2018/05/06 全球购物
C语言如何决定使用那种整数类型
2016/11/26 面试题
AJAX的优缺点都有什么
2015/08/18 面试题
信息工程学院毕业生推荐信
2013/11/05 职场文书
运动会四百米广播稿
2014/01/19 职场文书
授权委托书怎么写
2014/04/03 职场文书
《怀念母亲》教学反思
2016/02/19 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
详解Node.js如何处理ES6模块
2021/05/15 Javascript
python中pycryto实现数据加密
2022/04/29 Python
Nginx使用ngx_http_upstream_module实现负载均衡功能示例
2022/08/05 Servers