javascript變數聲明與函式宣告提升

來源:互聯網
上載者:User

標籤:表達   rip   聲明   cti   return   利用   試題   err   logs   

在JavaScript中,在聲明變數或者函數前就使用變數或者函數,會產生以外的錯誤。這些在很多JS的筆試題中都會出現。

先看下面這道題:

1 (function( ) {2      var x = foo( );3      var foo = function foo( ){4            return "foobar" ;5      } 6      return x; 7 })( );
問:上面函數的傳回值是()

A、類型錯誤
B、foobar
C、undefined
D、foo( )
答案應該選A,而不是D。說到這原因大家應該都清楚了。問題就處在這一句代碼處:
var foo = function foo(){
  return "foobar";
}
使用var聲明變數foo,會將其提升至函數體的最前面,但後面函數運算式不會提升相當於下面這樣:
var foo;
var x = foo();
foo = function foo(){....};
因此當函數執行到var x = foo();時,函數foo()還沒有聲明,因此會出現類型錯誤:TypeError: foo is not a function.

要想解決上面的代碼問題有兩重=種方式:
1、
(function( ) {
var foo = function foo( ){
return "foobar"
}
var x = foo( );
     return x; 
 })( );

2、去掉var foo,直接利用function()聲明foo(),這樣foo()也會被提升到最前面

1 (function( ) {2      var x = foo( );3      function foo( ){4            return "foobar" ;5      } 6      return x; 7 })( );

 

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.