Javascript學習筆記之 函數篇(一) : 函式宣告和函數運算式

來源:互聯網
上載者:User

函式宣告

function foo() {}

函數 foo 將會在整個程式執行前被 hoist (提升),因此它在定義 foo 函數的整個 scope (範圍)中都是可用的。即使在函數定義之前調用它也沒問題。

foo(); // Works because foo was created before this code runsfunction foo() {}

因為我打算專門寫篇介紹範圍的文章,所以這裡就不詳述了。

函數運算式

對於函式宣告,函數的名稱是必須的,而對於函數運算式而言則是可選的,因此,就出現了匿名函數運算式和命名函數運算式。如下:

函式宣告: function functionName (){  }
函式宣告: function functionName[可選](){  }
那麼我就知道,如果沒有函數名的話,一定就是函數運算式,但是對於有函數名的情況該如何判斷呢?
Javascript 規定如果整個函數體是作為運算式的一部分時,那麼它就是函數運算式,否則即是函式宣告。以下為運算式:

var fuc = foo(){}

我們再舉幾個極端的運算式例子:

!function foo(){}true && function foo(){}

以上的語句這裡只是為了區分函數運算式,一般不會這樣寫。那麼用一個對比的例子來看看效果:

foo1();//foo1 is not defined foo2();//works because foo2 was created before this code runs!function foo1() {  alert('foo1 works');};function foo2() {  alert('foo2 works');};

匿名函數運算式

var foo = function() {};

上面的例子將一個匿名函數賦值給了變數 foo。

foo; // 'undefined'foo(); // this raises a TypeErrorvar foo = function() {};

由於 var 是一個聲明所以這裡對變數 foo 進行 hoist (提升),因此當程式執行時,變數 foo 是可調用的。
但是由於指派陳述式只有在運行時才生效,所以變數 foo 的值為 undefined。

命名函數運算式

另一個要講到的就是命名函數的賦值。

var foo = function bar() {  bar(); // Works};bar(); // ReferenceError

在這裡,命名函數 bar 賦值給了變數 foo,所以在函式宣告外是不可見的,但在 bar 函數內部仍然可以調用。這是因為 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.