Javascript的变量作用域居然可以跨越多个函数!
??? 今天,編寫一個(gè)JavaScript的代碼,是這樣子的:
function a(){
?...
???? for(i=0;i<abc.length;i++){
???????? ...
????? b();
??? ...
? }
...
}?
?
function b(){
??? ...
? for(i=0;i<def.length;i++){
...
}
? ...
}??
?????? 這樣2個(gè)JavaScript函數(shù)。然而,a函數(shù)僅僅執(zhí)行了一次循環(huán),就跳出了for循環(huán)。它本應(yīng)該執(zhí)行多次循環(huán)。
???? 我查了一整天代碼,剛才終于讓我發(fā)現(xiàn)了錯(cuò)誤的原因。
??? 原來,Javascript的變量,生命周期管理有問題。函數(shù)a和b的局部變量i,? JavaScript認(rèn)為它們是同一個(gè)變量。
??? 這樣,在函數(shù)b中執(zhí)行完循環(huán)后,函數(shù)a中的i值已經(jīng)超過了條件,所以每一次都只執(zhí)行一次a的for循環(huán)。
??? 我把b函數(shù)中的i改成j之后,就正常了!
???
??? 這種變量生命周期的管理,確實(shí)是有悖常理的。 我使用的是IE7,不知道這是不是JavaScript的規(guī)范?還是IE7自身的實(shí)現(xiàn)有問題?
???????看來,我們必須在JavaScript編碼中,注意盡量避免使用同名的變量,以免發(fā)生變量名沖突這樣的問題。這種問題極其隱蔽,很難發(fā)現(xiàn)!
轉(zhuǎn)載于:https://www.cnblogs.com/armlinux/archive/2006/08/22/2391082.html
總結(jié)
以上是生活随笔為你收集整理的Javascript的变量作用域居然可以跨越多个函数!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS背景属性彻底研究
- 下一篇: Javadoc的使用