Javascript var变量隐式声明方法


Posted in Javascript onOctober 19, 2009

诸如此类。这有一个问题,比如说在代码中的某一行,我想使用的一个已声明的变量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 相关文章推荐
JS 实现完美include载入实现代码
Aug 05 Javascript
jQuery ui插件的使用方法代码实例
May 08 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
May 05 Javascript
浅谈Javascript线程及定时机制
Jul 02 Javascript
js点击按钮实现带遮罩层的弹出视频效果
Dec 19 Javascript
javascript实现简单计算器效果【推荐】
Apr 19 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
Feb 08 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
Aug 14 jQuery
webpack4 入门最简单的例子介绍
Sep 05 Javascript
js 将线性数据转为树形的示例代码
May 28 Javascript
对Layer UI 模块化的用法详解
Sep 26 Javascript
微信小程序吸底区域适配iPhoneX的实现
Apr 09 Javascript
让你的网站可编辑的实现js代码
Oct 19 #Javascript
document.onreadystatechange事件的用法分析
Oct 17 #Javascript
将jQuery应用于login页面的问题及解决
Oct 17 #Javascript
层序遍历在ExtJs的TreePanel中的应用
Oct 16 #Javascript
JavaScript 基于原型的对象(创建、调用)
Oct 16 #Javascript
JavaScript 定义function的三种方式小结
Oct 16 #Javascript
JavaScript 函数式编程的原理
Oct 16 #Javascript
You might like
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
利用Laravel生成Gravatar头像地址的优雅方法
2017/12/30 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
js 判断浏览器使用的语言示例代码
2014/03/22 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
jQuery实现点击关注和取消功能
2017/07/03 jQuery
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
Python的Django框架中的数据过滤功能
2015/07/17 Python
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
利用python程序生成word和PDF文档的方法
2017/02/14 Python
python中使用PIL制作并验证图片验证码
2018/03/15 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
JENNIFER BEHR官网:各种耳环和发饰
2020/06/07 全球购物
PHP笔试题
2012/02/22 面试题
初中生学习的自我评价
2013/11/14 职场文书
运动会开幕式邀请函
2014/02/03 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers