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 学习入门篇附实例代码
Mar 16 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
Nov 08 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
Oct 09 Javascript
悬浮广告方法日常收集整理
Mar 18 Javascript
js时间查询插件使用详解
Apr 07 Javascript
Vue.js递归组件构建树形菜单
Dec 24 Javascript
vue实现引入本地json的方法分析
Jul 12 Javascript
webpack的CSS加载器的使用
Sep 11 Javascript
node.js命令行教程图文详解
May 27 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
Nov 05 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
Feb 19 Javascript
详细聊聊vue中组件的props属性
Nov 02 Vue.js
让你的网站可编辑的实现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
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
PHP ADODB生成下拉列表框功能示例
2018/05/29 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
Javascript 汉字字节判断
2009/08/01 Javascript
windows系统下简单nodejs安装及环境配置
2013/01/08 NodeJs
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
深入理解js中this的用法
2016/05/28 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
vue webpack重写cookie路径的方法
2019/07/10 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
js对象属性名驼峰式转下划线的实例代码
2020/09/17 Javascript
跟老齐学Python之??碌某?? target=
2014/09/12 Python
python简单判断序列是否为空的方法
2015/06/30 Python
python使用 zip 同时迭代多个序列示例
2019/07/06 Python
pytorch 图像预处理之减去均值,除以方差的实例
2020/01/02 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
最新大学职业规划书范文
2013/12/30 职场文书
法学函授自我鉴定
2014/02/06 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
护士医德考评自我评价
2015/03/03 职场文书
浅谈Java父子类加载顺序
2021/08/04 Java/Android
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
2022/05/25 Servers