作家
登录

var与Javascript变量隐式声明

作者: 来源:www.28hudong.com 2013-03-30 02:19:35 阅读 我要评论

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 .

  推荐阅读

  jQuery 事件队列调整方法

大家都发现,通过jQuery绑定事件是件非常容易的事情 复制代码 代码如下:<TEXTAREA class=javascript name=code rows=15 cols=50>$("a").click(function(){ console.info("A"); return false; }); </TEXTAR>>>详细阅读


本文标题:var与Javascript变量隐式声明

地址:http://www.17bianji.com/kaifa2/JS/28091.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)