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插件开发 菜单插件开发
May 03 Javascript
中国地区三级联动下拉菜单效果分析
Nov 15 Javascript
js获取网页高度(详细整理)
Dec 28 Javascript
JavaScript 实现类的多种方法实例
May 01 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
Jul 19 Javascript
微信小程序实现多宫格抽奖活动
Apr 15 Javascript
react-redux中connect的装饰器用法@connect详解
Jan 13 Javascript
对Vue beforeRouteEnter 的next执行时机详解
Aug 25 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
Aug 31 Javascript
PHP实现基于Redis的MessageQueue队列封装操作示例
Feb 02 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
Oct 11 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
Oct 30 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
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
php数组去重实例及分析
2013/11/26 PHP
PHP实现的日历功能示例
2018/09/01 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
jQuery 选择器项目实例分析及实现代码
2012/12/28 Javascript
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
javascript三种代码注释方法
2016/06/02 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
python读取Excel实例详解
2018/08/17 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
详解python之heapq模块及排序操作
2019/04/04 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
在Pycharm中安装Pandas库方法(简单易懂)
2021/02/20 Python
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
师范教师毕业鉴定
2014/01/13 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
加薪通知
2015/04/25 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
Mysql 用户权限管理实现
2021/05/25 MySQL
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers