您好,登錄后才能下訂單哦!
本文實例講述了JavaScript變量提升和嚴格模式。分享給大家供大家參考,具體如下:
1.什么是變量提升
所謂的變量提升指的是:函數聲明和變量聲明總是會被解釋器悄悄地被"提升"到方法體(作用域)的最頂部。
下面我們通過一個例子來詳細說明一下。
//變量聲明在使用之前 var x; console.log(x);//undefined //變量聲明在使用之后 console.log(y);//undefined var y; //上面的式子可以寫成下面的樣子 /* 變量提升:把x,y提升到頂部 var x; var y; console.log(x); console.log(y); */
從上面這個例子我們可以看到:
①變量的使用有兩種形式,先聲明再使用或者先使用后聲明;
②無論是哪一種形式都不影響變量的使用,這是因為有變量提升的存在,每一個你定義的變量都會被提升到頂部,也就是函數最開始的部分,這就變成了你在使用變量時其實都已經聲明變量了。
下面我舉一個經典的例子來更好地理解一下。
//經典案例:window表示全局,判斷條件(變量a是否有在全局下)是在變量a聲明之前 if(a in window){ var a; console.log('a in window'); }else{console.log('a not in window');} //a in window //相當于: /* var a; //a被提升到頂部 if(a in window){ console.log('a in window'); }else{console.log('a not in window');} */
這是變量提升的一個很好的例子,可以看到打印出來的結果表明,在我們使用a之前,聲明變量a就被提升到頂部。
但是,要注意的是JavaScript 只有聲明的變量會提升,初始化的不會。
console.log(c);//undefined var c = 1; //初始化 /* var c; console.log(c); c = 1; */ var d;//聲明d d = 1;//初始化 console.log(d);//1
上面的c打印結果為undefined,這是因為提升的只有聲明變量var c
,而初始化的c=1
沒有提升而在使用之后。
為了避免上面出現的變量提升的問題,通常我們在每個作用域開始前聲明我們要使用的變量。
2.嚴格模式
嚴格模式的寫法就是在代碼編寫之前加上"use strict",嚴格模式要求你不能使用未聲明的變量,否則會報錯。
例如:
"use strict"; //嚴格模式 m =1; console.log(m);//m is not defined //在嚴格模式下,因為m未被聲明就被使用或者初始化則會報錯 var n = 1; console.log(n);//1
但是在沒有使用嚴格模式的時候:
m =1; console.log(m);//1 //在非嚴格模式下,同樣這樣寫就不會報錯
雖然還是沒有聲明變量m但還是可以使用的。
所以,還是建議大家盡可能得使用嚴格模式來編寫javascript代碼,以消除Javascript語法的一些不合理、不嚴謹之處,讓自己成為一個更優秀的程序員。
感興趣的朋友還可以使用本站在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行結果。
更多關于JavaScript相關內容還可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》
希望本文所述對大家JavaScript程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。