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 相关文章推荐
Jquery AJAX 用于计算点击率(统计)
Jun 30 Javascript
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
Jul 27 Javascript
JavaScript获取图片的原始尺寸以宽度为例
May 04 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
Jun 23 Javascript
JQuery中节点遍历方法实例
May 18 Javascript
Angular2入门教程之模块和组件详解
May 28 Javascript
Vue render深入开发讲解
Apr 13 Javascript
详解使用VueJS开发项目中的兼容问题
Aug 02 Javascript
Node 搭建一个静态资源服务器的实现
May 20 Javascript
微信小程序实现渐入渐出动画效果
Jun 13 Javascript
vue实现滑动超出指定距离回顶部功能
Jul 31 Javascript
10分钟学会js处理json的常用方法
Dec 06 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 - Html Transfer Code
2006/10/09 PHP
php类
2006/11/27 PHP
php打造属于自己的MVC框架
2012/03/07 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
php中解析带中文字符的url函数分享
2015/01/20 PHP
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
用JavaScript调用WebService的示例
2008/04/07 Javascript
ExtJs中简单的登录界面制作方法
2010/08/19 Javascript
利用javascript解决图片缩放及其优化的代码
2012/05/23 Javascript
JS获取各种宽度、高度的简单介绍
2014/12/19 Javascript
基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
2016/03/07 Javascript
jQuery实现ajax无刷新分页页码控件
2017/02/28 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
python3.5使用tkinter制作记事本
2016/06/20 Python
python3 读写文件换行符的方法
2018/04/09 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
python正则-re的用法详解
2019/07/28 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
给国外客户的邀请函
2014/01/30 职场文书
绿里奇迹观后感
2015/06/15 职场文书
Python基础之Socket通信原理
2021/04/22 Python
golang goroutine顺序输出方式
2021/04/29 Golang
keepalived + nginx 实现高可用方案
2022/12/24 Servers