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 相关文章推荐
javascript 特性检测并非浏览器检测
Jan 15 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
Jul 25 Javascript
Javascript操作cookie的函数代码
Oct 03 Javascript
JS写的贪吃蛇游戏(个人练习)
Jul 08 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
Jan 07 Javascript
jQuery.holdReady()使用方法
May 20 Javascript
jquery+easeing实现仿flash的载入动画
Mar 10 Javascript
JavaScript基础知识之方法汇总结
Jan 24 Javascript
JavaScript类的写法
Sep 17 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
Sep 12 Javascript
简单了解前端渐进式框架VUE
Jul 20 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
Oct 02 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的MVC模式实现原理分析(一相简单的MVC框架范例)
2014/04/29 PHP
基于php编程规范(详解)
2017/08/17 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
php命令行模式代码实例详解
2021/02/26 PHP
IE和Firefox下event事件杂谈
2009/12/18 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
一个js过滤空格的小函数
2014/10/10 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
JavaScript中Object.prototype.toString方法的原理
2016/02/24 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
2016/03/01 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
基于jQuery实现滚动刷新效果
2017/01/09 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
python实现在sqlite动态创建表的方法
2015/05/08 Python
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
2015/05/09 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
Python中的heapq模块源码详析
2019/01/08 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
国培计划培训感言
2014/03/11 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
三下乡个人总结
2015/03/04 职场文书
创业计划书之服装
2019/10/07 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
Python实现机器学习算法的分类
2021/06/03 Python