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 相关文章推荐
ExtJS 2.2.1的grid控件在ie6中的显示问题
May 04 Javascript
JavaScript 组件之旅(一)分析和设计
Oct 28 Javascript
javascript 另一种图片滚动切换效果思路
Apr 20 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
Sep 01 Javascript
jquery实现滑动特效代码
Aug 10 Javascript
JS定义类的六种方式详解
May 12 Javascript
js判断空对象的实例(超简单)
Jul 26 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
Feb 03 Javascript
vue模块拖拽实现示例代码
Mar 09 Javascript
微信小程序canvas分享海报功能
Oct 31 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
Feb 11 Javascript
webpack 动态批量加载文件的实现方法
Mar 19 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
Protoss兵种介绍
2020/03/14 星际争霸
初识PHP
2014/09/28 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
PHP crc32()函数讲解
2019/02/14 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
eval的两组性能测试数据
2012/08/17 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
jQuery实现二级下拉菜单效果
2016/01/05 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
JS验证不重复验证码
2017/02/10 Javascript
深入理解vue中的$set
2017/06/01 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
vue cli3 配置proxy代理无效的解决
2019/10/30 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
python使用百度翻译进行中翻英示例
2014/04/14 Python
Python中处理时间的几种方法小结
2015/04/09 Python
机器学习10大经典算法详解
2017/12/07 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
python中class的定义及使用教程
2019/09/18 Python
Django 返回json数据的实现示例
2020/03/05 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
美国一家运动专业鞋类零售商:Warehouse Shoe Sale(WSS)
2018/03/28 全球购物
机电一体化专业应届本科生求职信
2013/09/27 职场文书
大学三年计划书范文
2014/04/30 职场文书
八项规定整改方案
2014/10/01 职场文书
老公保证书
2015/01/17 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
高考要来啦!用Python爬取历年高考数据并分析
2021/06/03 Python
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android
Android存储中最基本的文件存储方式
2022/04/30 Java/Android