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 相关文章推荐
JQuery AJAX提交中文乱码的解决方案
Jul 02 Javascript
使用apply方法处理数组的三个技巧[译]
Sep 20 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
Jan 24 Javascript
js创建对象几种方式的优缺点对比
Sep 28 Javascript
微信小程序 wx:key详细介绍
Oct 28 Javascript
Canvas + JavaScript 制作图片粒子效果
Feb 08 Javascript
利用node.js搭建简单web服务器的方法教程
Feb 20 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
Jun 22 Javascript
vue修改vue项目运行端口号的方法
Aug 04 Javascript
Angular中支持SCSS的方法
Nov 18 Javascript
jQuery length 和 size()区别总结
Apr 26 jQuery
JavaScript数组、json对象、eval()函数用法实例分析
Feb 21 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
解析php中如何调用用户自定义函数
2013/08/06 PHP
linux下编译安装memcached服务
2014/08/03 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
JS判断元素为数字的奇异写法分享
2012/08/01 Javascript
JS文件上传神器bootstrap fileinput详解
2021/01/28 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
vue实现拖拽效果
2019/12/23 Javascript
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
Python多线程学习资料
2012/12/19 Python
详解Python Socket网络编程
2016/01/05 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
django如何实现视图重定向
2019/07/24 Python
简单介绍python封装的基本知识
2019/08/10 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
python脚本和网页有何区别
2020/07/02 Python
python 三种方法提取pdf中的图片
2021/02/07 Python
Araks官网:纽约内衣品牌
2020/10/15 全球购物
公司离职证明范本
2014/01/13 职场文书
电力安全事故反思
2014/04/27 职场文书
房产授权委托书范本
2014/09/22 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
业务员辞职信范文
2015/03/02 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
新闻通讯稿范文
2015/07/22 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android