手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >var与Javascript变量隐式声明
var与Javascript变量隐式声明
摘要:varx="XX";y="xxx";诸如此类。这有一个问题,比如说在代码中的某一行,我想使用的一个已声明的变量x,结果由于打字或者拼写错误,...

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 .

【var与Javascript变量隐式声明】相关文章:

JavaScript中的私有成员

简单介绍JavaScript的变量和数据类型

javascript的事件描述

JavaScript点击按钮后弹出透明浮动层的方法

Javascript 小技巧全集第1/4页

学习Javascript面向对象编程之封装

javascript正则表达式总结

JavaScript事件的理解

javascript自定义右键弹出菜单实现方法

javascript原型模式用法实例详解

精品推荐
分类导航