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 相关文章推荐
点击广告后才能获得下载地址
Oct 26 Javascript
原创jQuery弹出层插件分享
Apr 02 Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
Sep 14 Javascript
jquery.zclip轻量级复制失效问题
Jan 08 Javascript
Angular.js基础学习之初始化
Mar 10 Javascript
Vue2.x中的父子组件相互通信的实现方法
May 02 Javascript
浅谈vue路径优化之resolve
Oct 13 Javascript
讲解vue-router之什么是嵌套路由
May 28 Javascript
如何自动化部署项目?折腾服务器之旅~
Apr 16 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
Jul 20 Javascript
taro 实现购物车逻辑的实例代码
Jun 05 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多用户计数器代码
2007/03/11 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
2013/06/27 PHP
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
详解如何在Apache中运行Python WSGI应用
2019/01/02 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
2019/05/18 Python
解决python 文本过滤和清理问题
2019/08/28 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
xml有哪些解析技术?区别是什么
2016/04/26 面试题
生物科学专业毕业生求职信
2014/06/02 职场文书
父亲节寄语大全
2015/02/27 职场文书
2015年班干部工作总结
2015/04/29 职场文书
python实现图片批量压缩
2021/04/24 Python