在JavaScript中,var用来声明变量,可是这个语法并不严酷要求,许多时修改,我们可以直接行使一个变量而不消var声明它。 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 (编辑:河北网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|