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 相关文章推荐
javascript 同时在IE和FireFox获取KeyCode的代码
Feb 07 Javascript
弹出最简单的模式化遮罩层的js代码
Dec 04 Javascript
js处理自己不能定义二维数组的方法详解
Mar 03 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
Jun 05 Javascript
jquery选择器需要注意的问题
Nov 26 Javascript
举例讲解JavaScript substring()的使用方法
Nov 09 Javascript
微信小程序 slider 详解及实例代码
Jan 10 Javascript
vue中七牛插件使用的实例代码
Jul 28 Javascript
基于bootstrop常用类总结(推荐)
Sep 11 Javascript
浅谈vue.use()方法从源码到使用
May 12 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
Feb 24 Javascript
如何在postman测试用例中实现断言过程解析
Jul 09 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文件的实现方法
2007/03/19 PHP
PHP入门学习笔记之一
2010/10/12 PHP
PHP利用imagick生成组合缩略图
2016/02/19 PHP
PHP的反射机制实例详解
2017/03/29 PHP
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
Node.js插件安装图文教程
2016/05/06 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
详解python-图像处理(映射变换)
2019/03/22 Python
Django中的cookie和session
2019/08/27 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
公司前台接待岗位职责
2013/12/03 职场文书
金融管理应届生求职信
2014/02/20 职场文书
土建专业毕业生自荐书
2014/07/04 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
《用字母表示数》教学反思
2016/02/17 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书
python cv2图像质量压缩的算法示例
2021/06/04 Python