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 相关文章推荐
jQuery 相关控件的事件操作分解
Aug 03 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
Mar 04 Javascript
JS的replace方法详细介绍
Nov 09 Javascript
ajax异步刷新实现更新数据库
Dec 03 Javascript
下载文件个别浏览器文件名乱码解决办法
Mar 19 Javascript
jquery的ajax异步请求接收返回json数据实例
Jun 16 Javascript
jQuery实现跨域iframe接口方法调用
Mar 14 Javascript
AngularJS基础 ng-mousemove 指令简单示例
Aug 02 Javascript
jQuery实用密码强度检测
Mar 02 Javascript
vue中七牛插件使用的实例代码
Jul 28 Javascript
详解mpvue scroll-view自动回弹bug解决方案
Oct 01 Javascript
从理论角度讨论JavaScript闭包
Apr 03 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常用函数和常见疑难问题解答
2014/03/05 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
php 实现进制相互转换
2016/04/07 PHP
thinkPHP中session()方法用法详解
2016/12/08 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
使用Apache的rewrite
2021/03/09 Servers
用unescape反编码得出汉字示例
2014/04/24 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
python 文件查找及内容匹配方法
2018/10/25 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
Python Merge函数原理及用法解析
2020/09/16 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
html5简介及新增功能介绍
2020/05/18 HTML / CSS
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
力学专业毕业生自荐信
2013/11/17 职场文书
大家检讨书5000字
2014/02/03 职场文书
师范生求职自荐信
2014/06/14 职场文书
英语教育专业毕业生求职信
2014/08/28 职场文书
公司档案管理制度
2015/08/05 职场文书
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python
Python数组变形的几种实现方法
2022/05/30 Python