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 相关文章推荐
加速IE的Javascript document输出的方法
Dec 02 Javascript
javascript将数组插入到另一个数组中的代码
Jan 10 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
Feb 16 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
Mar 23 jQuery
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
May 02 Javascript
关于webpack代码拆分的解析
Jul 20 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
Jun 19 Javascript
详解vue-router数据加载与缓存使用总结
Oct 29 Javascript
微信小程序如何调用新闻接口实现列表循环
Jul 02 Javascript
mpvue实现微信小程序快递单号查询代码
Apr 03 Javascript
js+html+css实现手动轮播和自动轮播
Dec 30 Javascript
如何通过简单的代码描述Angular父组件、子组件传值
Apr 07 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提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
javascript第一课
2007/02/27 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
javascripit实现密码强度检测代码分享
2013/12/12 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
2014/05/05 Javascript
JS实现文件动态顺序载入的方法
2015/03/07 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
2018/09/14 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
2020/04/09 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
Python守护进程(daemon)代码实例
2015/03/06 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
使用Python对MySQL数据操作
2017/04/06 Python
python安装numpy&安装matplotlib& scipy的教程
2017/11/02 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
Python实现图片拼接的代码
2018/07/02 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
团员学习总结的自我评价范文
2013/10/14 职场文书
家长评语大全
2014/01/22 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
教师个人总结范文
2015/02/11 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
交通事故起诉书
2015/05/19 职场文书
党支部考察意见范文
2015/06/02 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android