var与Javascript变量隐式声明


Posted in Javascript onSeptember 17, 2009

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 相关文章推荐
JObj预览一个JS的框架
Mar 13 Javascript
js onload处理html页面加载之后的事件
Oct 30 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
Jan 14 Javascript
node.js中的fs.linkSync方法使用说明
Dec 15 Javascript
javascript定义类和类的实现实例详解
Dec 01 Javascript
Bootstrap页面布局基础知识全面解析
Jun 13 Javascript
JavaScript之WebSocket技术详解
Nov 18 Javascript
jQuery实现判断控件是否显示的方法
Jan 11 Javascript
jquery实现input框获取焦点的方法
Feb 06 Javascript
Ionic2调用本地SQlite实例
Apr 22 Javascript
基于jquery实现左右上下移动效果
May 02 jQuery
vue动态子组件的两种实现方式
Sep 01 Javascript
html数组字符串拼接的最快方法
Sep 16 #Javascript
在IE下获取object(ActiveX)的Param的代码
Sep 15 #Javascript
javascript 检测浏览器类型和版本的代码
Sep 15 #Javascript
不安全的常用的js写法
Sep 15 #Javascript
Mootools 1.2教程 滑动效果(Slide)
Sep 15 #Javascript
Mootools 1.2教程 同时进行多个形变动画
Sep 15 #Javascript
Mootools 1.2教程(21)——类(二)
Sep 15 #Javascript
You might like
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
PHP Directory 函数的详解
2013/03/07 PHP
php.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
javascript和php使用ajax通信传递JSON的实例
2018/08/21 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
2019/10/09 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
[16:01]夜魇凡尔赛茶话会 第二期01:你比划我猜
2021/03/11 DOTA
python中sets模块的用法实例
2014/09/30 Python
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
Python sys模块常用方法解析
2020/02/20 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
"引用"与指针的区别是什么
2016/09/07 面试题
小加工厂管理制度
2014/01/21 职场文书
财务部经理岗位职责
2014/02/03 职场文书
民生工程实施方案
2014/03/22 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
防灾减灾标语
2014/10/07 职场文书
质量整改报告范文
2014/11/08 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
团队合作精神学习心得体会
2016/01/19 职场文书
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python