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获取Select选择的Text和Value(详细汇总)
Jan 25 Javascript
使用不同的方法结合/合并两个JS数组
Sep 18 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
Aug 04 Javascript
AJAX和jQuery动态加载数据的实现方法
Dec 05 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
Jun 09 jQuery
写给小白看的JavaScript异步
Nov 29 Javascript
swiper动态改变滑动内容的实现方法
Jan 17 Javascript
Vue.js特性Scoped Slots的浅析
Feb 20 Javascript
vue中datepicker的使用教程实例代码详解
Jul 08 Javascript
webpack 如何解析代码模块路径的实现
Sep 04 Javascript
vue设置导航栏、侧边栏为公共页面的例子
Nov 01 Javascript
详解Howler.js Web音频播放终极解决方案
Aug 23 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
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
PHP操作文件方法问答
2007/03/16 PHP
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
php正则表达匹配中文问题分析小结
2012/03/25 PHP
谨慎使用PHP的引用原因分析
2012/09/06 PHP
基于php缓存的详解
2013/05/15 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
JavaScript判断微信浏览器实例代码
2016/06/13 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
Vue常用的全选/反选的示例代码
2020/02/19 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
python根据出生日期返回年龄的方法
2015/03/26 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
Python定义一个Actor任务
2020/07/29 Python
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
毕业生教师求职信
2013/10/20 职场文书
师范生自荐信
2013/10/27 职场文书
小学生保护环境倡议书
2014/05/15 职场文书
大学学生个人总结
2015/02/15 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
导游词之天下银坑景区
2019/11/21 职场文书
Python图片验证码降噪和8邻域降噪
2021/08/30 Python
Python Flask实现进度条
2022/05/11 Python