您好,登錄后才能下訂單哦!
這篇文章主要介紹了javascript使用var聲明變量的問題怎么解決的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇javascript使用var聲明變量的問題怎么解決文章都會有所收獲,下面我們一起來看看吧。
使用var
聲明變量(允許重復變量聲明:導致數據被覆蓋)
怪異數據訪問
閉包問題
在函數的變量會提升到最頂部
在全局作用域的變量也會提升到最頂部
JavaScript中的var聲明變量的缺陷
未聲明卻可以使用(var聲明的變量會預編譯或者說是變量提示),這不符合邏輯。
同一個變量可以被多次聲明,但是嚴謹來說,一個變量被聲明一次之后,后面便只能對它修改而不是聲明。也不符合邏輯。
for循環中的循環參數可以在循環外使用(for循環被污染),而超出了最初主要控制循環的作用。不符合邏輯。
沒有塊級作用域。
我們來舉例看一下
//首先判斷生成一個隨機數當隨機數小于0.5時聲明a賦值為‘abc’ //然后輸出a if (Math.random() < 0.5){ var a = 'abc'; console.log(a); } //如果不是那么輸出a else { console.log(a) } console.log(a);
這里就有一個很嚴重的問題讓我們來讀一下:
首先判斷生成一個隨機數當隨機數小于0.5時聲明a且輸出a
然后如果不小于0.5也輸出a
那么這個a實際上是不存在的因為遇到了變量提升問題導致全局作用域有了一個a,這樣雖然能讀到但是因為這個變量提升就導致全局作用域被污染了。
在正常看來這似乎沒有問題但是將這串代碼放在其他任何語言上寫出類似的代碼他必定會報錯同時也因為這個問題導致他在一定程度上對大型應用的吃力。
讓我們再來看看閉包問題:
//選中div var div = document.getElementByTd('div'); //我這里創建10個按鈕并添加進代碼里 for (var i = 1; 1 < 10; i ++){ var btn = document.createElement('button'); btn.innerHTML = '按鈕' + i; div.appendChild(btn); //添加點擊事件點擊按鈕時輸出對應的i btn.onclick = function () { console.log(i); } } //但是當點擊輸出時所有的按鈕都為11 //原因是當在for聲明變量i時遇到了變量提升就導致了來來回回更改的就只有這一個i //而當我們點擊時for早已循環完所以循環完成時i = 11;就輸出也是11了 // //一般我們的解決辦法是將點擊事件上寫一個立即執行函數執行完刪除方可正常運行
全局變量掛載到全局對象:全局對象成員污染問題
var abc = "123" console.log(abc); //可以正常輸出對吧,這就導致了一個問題 //我可以將abc掛載到window上如果說我要寫很多的代碼那就會導致全局變量污染 //然后我給console賦值 var console = "abc"; console.log(console); //然后再輸出console會報錯 //因為我對window的console進行了覆蓋所以會報錯
這就是原來的JS所遇到的各種問題和不方便的地方
關于“javascript使用var聲明變量的問題怎么解決”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“javascript使用var聲明變量的問題怎么解決”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。