JavaScript範圍(第七天)

來源:互聯網
上載者:User

標籤:world   提前   應該   部分   var   簡單   例子   就會   沒有   

我們都知道js代碼是由自上而下的執行,但我們來看看下面的代碼;

test();

function test(){

  console.log("hello world");

};

如果我們簡單的認為js是由自上而下的執行,那麼上面的代碼應該會報錯,提示test 不是一個方法;但結果並沒有報錯,而是進行正確的輸出了;

這樣我們就應該知道js執行分為兩部分

1.預解析;2.執行

預解析會將var 定義的變數及function進行提前處理;

也就是說上面的代碼會被處理為

function test(){

  console.log("hello world");

}

test();

所以調用並沒有報錯;

下面我們再來測試var

alert(a);

var a=1;

這時候彈出的是undefined;注意,並沒有報錯;

而上面的代碼其實是被預解析為

var a;

alert(a);

a=1;

所以彈出的是一個undefined;

當變數與函數同名的時候,會忽略變數的提升,下面我們看一個例子

console.log(test);

function test(){

}

console.log(test);

var test=123;

console.log(test);

上面的代碼會被預先處理為

function test(){

}

console.log(test);

console.log(test);

test=123;

console.log(test);

我們可以看出變數名提升被忽略了;

函數運算式不會被提升的,如

test();

var test=function(){

};

這時候運行,就會報錯;提示test不是一個方法;

預先處理的代碼為

var test;

test();

test=function(){

};

js中沒有塊級範圍;

例如

if(true){

  var a=123;

}

如果是其他語言,如java,c#變數a只在if塊級範圍有效;

但在js中並沒有這樣的塊級範圍;會被預先處理為

var a;

if(true){

  a=123;

}

 

JavaScript範圍(第七天)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.