當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JS中的变量提升
由于JS引擎的工作方式,是先獲取所有被聲明的變量再逐一執行,所以變量的聲明語句都會被提升到當前代碼塊的頭部。
例1:
var a = 1;function test1(){alert(a);var a = 2;alert(a);}test1();//undefined,2輸出結果是undefined,2,并不是1,2,實際執行順序:
var a = 1;function test1() {var a; //變量提升,先聲明a(當局部變量與全局變量重名時,局部變量優先級高于全局變量,所以會覆蓋全局變量,此時的a只有聲明卻未定義)alert(a);//所以執行alert值為undefineda = 2;alert(a);//此時a=2}test1();例2:
function test2() {alert("before for scope:" + i); //不會報錯,undefined,變量提升i已聲明未賦值for (var i = 0; i < 3; i++) { //for不存在作用域之說alert("in for scope:" + i); // i的值是 0、1、2, 當i為3時跳出循環}alert("after for scope:" + i); // i的值是3,注意,此時已經在for scope以外,但i的值仍然保留為3while (true) {var j = 1;break;}alert(j); // j的值是1,注意,此時已經在while scope以外,但j的值仍然保留為1if (true) {var k = 1;}alert(k); //k的值是1,注意,此時已經在if scope以外,但k的值仍然保留為1}test2();alert(i); //此處報錯,i指的是全局變量,is not defined(未定義),程序中斷注意:
1.當局部變量與全局變量重名時,局部變量優先級高于全局變量,所以會覆蓋全局變量;
2.全局變量是指在函數外定義,全局可訪問;局部變量是指函數內定義,外部不能正常訪問;
3.函數作用域是指function的作用域,像if/while等并沒有作用域;
4.is not defined是指變量未定義(未聲明),undefined則是指變量已經聲明但可能未賦值等其他原因;
5.undefined不影響運行,is not undefined會直接報錯,中斷運行;
6.在函數內部定義變量時,如果不加var而是直接如i = 1這種,實際相當于定義了一個全局變量;
總結
- 上一篇: element.onclick = fu
- 下一篇: 地图相关应用系统部署到现场报错原因汇总