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 相关文章推荐
js下弹出窗口的变通
Apr 18 Javascript
JS 强制设为首页的代码
Jan 31 Javascript
JS模拟面向对象全解(一、类型及传递)
Jul 13 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
May 11 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
Aug 08 Javascript
浅谈Javascript 执行顺序
Dec 18 Javascript
jQuery中change事件用法实例
Dec 26 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
Mar 06 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
Jun 19 jQuery
JS实现时间校验的代码
May 25 Javascript
JavaScript中的函数式编程详解
Aug 22 Javascript
ES6学习教程之Promise用法详解
Nov 22 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关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
『PHP』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
php递归创建目录的方法
2015/02/02 PHP
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
js function定义函数使用心得
2010/04/15 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
JavaScript创建防篡改对象的方法分析
2018/12/30 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
2017/05/31 Python
python使用turtle绘制分形树
2018/06/22 Python
Django实现跨域的2种方法
2019/07/31 Python
Python基于WordCloud制作词云图
2019/11/29 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
护理毕业生自荐信范文
2013/12/22 职场文书
会计大学生职业生涯规划书范文
2014/01/13 职场文书
五年级数学教学反思
2014/02/11 职场文书
大学自主招生推荐信
2014/05/10 职场文书
建筑学专业自荐书
2014/07/09 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
Nginx如何配置根据路径转发详解
2022/07/23 Servers