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 相关文章推荐
js模拟点击事件实现代码
Nov 06 Javascript
JQuery操作单选按钮以及复选按钮示例
Sep 23 Javascript
js使用数组判断提交数据是否存在相同数据
Nov 27 Javascript
javascript实现的一个带下拉框功能的文本框
May 08 Javascript
javascript实现表格增删改操作实例详解
May 15 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
Oct 29 Javascript
JavaScript操作文件_动力节点Java学院整理
Jun 30 Javascript
Vue中封装input组件的实例详解
Oct 17 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
Aug 20 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
May 31 Javascript
ES6学习笔记之let与const用法实例分析
Jan 22 Javascript
利用H5api实现时钟的绘制(javascript)
Sep 13 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
PHP分页显示制作详细讲解
2006/10/09 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
2013/06/24 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
2014/09/11 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
一篇文章掌握RequireJS常用知识
2016/01/26 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
如何解决hover在ie6中的兼容性问题
2016/12/15 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
Python绘制数码晶体管日期
2021/02/19 Python
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
大学生自我评价怎样写好
2013/10/23 职场文书
企业文化理念标语
2014/06/10 职场文书
暑期社会实践证明书
2014/11/17 职场文书