当前位置: 首页 > 图文教程 > 网络编程 > Javascript > Javascript var变量隐式声明方法

Javascript
非常不错的 子鼠 滑动图片效果 Javascript+CSS
Mozilla 表达式 __noSuchMethod__
javascript 获取图片颜色
JavaScript 在各个浏览器中执行的耐性
在JavaScript中,为什么要尽可能使用局部变量?
javascript 日历提醒系统( 兼容所有浏览器 )
常用JS代码实例小结
jQuery 插件 将this下的div轮番显示
网页特效从下往上过渡 共享图库_最新图片
由document.body和document.documentElement想到的
JavaScript获取GridView中用户点击控件的行号,列号
jQuery 入门讲解1
百度 popup.js 完美修正版非常的不错
jQuery autocomplete插件修改
jQuery对象和DOM对象相互转化
javascript 人物逼真行走,已完成
基于jQuery图片平滑连续滚动插件
ie 调试javascript的工具
ExtJS 2.0实用简明教程 之Border区域布局
ExtJS 2.0实用简明教程 之Ext类库简介

Javascript var变量隐式声明方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 160 ::
收藏到网摘: n/a

在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它。

诸如此类。这有一个问题,比如说在代码中的某一行,我想使用的一个已声明的变量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 .