var与Javascript变量隐式声明


Posted in Javascript onSeptember 17, 2009

var x = "XX";
y ="xxx";
诸如此类。这有一个问题,比如说在代码中的某一行,我想使用的一个已声明的变量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 相关文章推荐
Mootools 1.2教程 排序类和方法简介
Sep 15 Javascript
parseInt parseFloat js字符串转换数字
Aug 01 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
May 30 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
Sep 27 Javascript
基于jquery实现全屏滚动效果
Nov 26 Javascript
一道关于JavaScript变量作用域的面试题
Mar 08 Javascript
BootStrap实用代码片段之一
Mar 22 Javascript
jquery插件autocomplete用法示例
Jul 01 Javascript
JS 动态判断PC和手机浏览器实现代码
Sep 21 Javascript
vue2 中如何实现动态表单增删改查实例
Jun 09 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
Jul 05 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
Jan 21 Javascript
html数组字符串拼接的最快方法
Sep 16 #Javascript
在IE下获取object(ActiveX)的Param的代码
Sep 15 #Javascript
javascript 检测浏览器类型和版本的代码
Sep 15 #Javascript
不安全的常用的js写法
Sep 15 #Javascript
Mootools 1.2教程 滑动效果(Slide)
Sep 15 #Javascript
Mootools 1.2教程 同时进行多个形变动画
Sep 15 #Javascript
Mootools 1.2教程(21)——类(二)
Sep 15 #Javascript
You might like
php获取bing每日壁纸示例分享
2014/02/25 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
js最简单的拖拽效果实现代码
2010/09/24 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
Easy UI动态树点击文字实现展开关闭功能
2017/09/30 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
2018/09/26 Javascript
实例讲解JavaScript预编译流程
2019/01/24 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
JS实现点星星消除小游戏
2020/03/24 Javascript
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
Python多线程和队列操作实例
2015/06/21 Python
详解用python生成随机数的几种方法
2019/08/04 Python
Python实现转换图片背景颜色代码
2020/04/30 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
八皇后问题,输出了所有情况,不过有些结果只是旋转了90度
2016/08/15 面试题
启动一个线程是用run()还是start()
2016/12/25 面试题
总裁秘书岗位职责
2013/12/04 职场文书
马云的职业生涯规划之路
2014/01/01 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
读群众路线的心得体会
2014/09/03 职场文书
科学育儿宣传标语
2014/10/08 职场文书
2014年妇女工作总结
2014/12/06 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
2015小学音乐教师个人工作总结
2015/07/21 职场文书
详解TypeScript的基础类型
2022/02/18 Javascript