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 相关文章推荐
用JavaScript脚本实现Web页面信息交互
Oct 11 Javascript
关于JavaScript的with 语句的使用方法
May 09 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
Aug 24 Javascript
javascript汉字拼音互转的简单实例
Oct 09 Javascript
基于JavaScript实现本地图片预览
Feb 08 Javascript
基于原生js运动方式关键点的总结(推荐)
Oct 01 Javascript
Vue 2.0学习笔记之Vue中的computed属性
Oct 16 Javascript
利用babel将es6语法转es5的简单示例
Dec 01 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
Dec 14 Javascript
vue.js中npm安装教程图解
Apr 10 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
May 23 Javascript
layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子
Sep 06 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+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
php基础学习之变量的使用
2011/06/09 PHP
php摘要生成函数(无乱码)
2012/02/04 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
PHPMailer发送邮件
2016/12/28 PHP
laravel 5.3 单用户登录简单实现方法
2019/10/14 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
Javascript Global对象
2009/08/13 Javascript
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
JavaScript ES2019中的8个新特性详解
2019/02/20 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
python3.x实现发送邮件功能
2018/05/22 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
Python I/O与进程的详细讲解
2019/03/08 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
详解python datetime模块
2020/08/17 Python
Python实现自动签到脚本功能
2020/08/20 Python
Python如何执行系统命令
2020/09/23 Python
旅游管理毕业生自荐信
2013/11/05 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
先进工作者推荐材料
2014/12/23 职场文书
工人先锋号事迹材料
2014/12/24 职场文书
导游词幽默开场白
2019/06/26 职场文书
Python访问Redis的详细操作
2021/06/26 Python