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的试卷自动排版系统实现代码
Jan 06 Javascript
jQuery中校验时间格式的正则表达式小结
Sep 22 Javascript
JavaScript中模拟实现jsonp
Jun 19 Javascript
基于jQuery的Web上传插件Uploadify使用示例
May 19 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
Jun 09 Javascript
微信小程序 闭包写法详细介绍
Dec 14 Javascript
JavaScript验证知识整理
Mar 24 Javascript
Node.js Buffer用法解读
May 18 Javascript
Vue路由模块化配置的完整步骤
Aug 14 Javascript
vue项目实现图片上传功能
Dec 23 Javascript
JS PHP字符串截取函数实现原理解析
Aug 29 Javascript
vue3.0 上手体验
Sep 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
网站当前的在线人数
2006/10/09 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
google地图的路线实现代码
2009/08/20 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
2013/02/06 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
用js实现放大镜效果
2020/10/28 Javascript
python三元运算符实现方法
2013/12/17 Python
Python3基础之条件与循环控制实例解析
2014/08/13 Python
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
200行自定义python异步非阻塞Web框架
2017/03/15 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
2018/12/06 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
大学毕业生的自我鉴定
2013/11/30 职场文书
计算机软件个人的自荐信范文
2013/12/01 职场文书
小学科学教学反思
2014/01/26 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
交通事故协议书范文
2014/10/23 职场文书
义诊活动通知
2015/04/24 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书