Javascript學(xué)習(xí)筆記之 函數(shù)篇(一) : 函數(shù)聲明和函數(shù)表達式
函數(shù)聲明
function foo() {}
函數(shù) foo 將會在整個程序執(zhí)行前被 hoist (提升),因此它在定義 foo 函數(shù)的整個 scope (作用域)中都是可用的。即使在函數(shù)定義之前調(diào)用它也沒問題。
foo(); // Works because foo was created before this code runs function foo() {}
因為我打算專門寫篇介紹作用域的文章,所以這里就不詳述了。
函數(shù)表達式
對于函數(shù)聲明,函數(shù)的名稱是必須的,而對于函數(shù)表達式而言則是可選的,因此,就出現(xiàn)了匿名函數(shù)表達式和命名函數(shù)表達式。如下:
函數(shù)聲明: function functionName (){ }
函數(shù)聲明: function functionName[可選](){ }
那么我就知道,如果沒有函數(shù)名的話,一定就是函數(shù)表達式,但是對于有函數(shù)名的情況該如何判斷呢?
Javascript 規(guī)定如果整個函數(shù)體是作為表達式的一部分時,那么它就是函數(shù)表達式,否則即是函數(shù)聲明。以下為表達式:
var fuc = foo(){}
我們再舉幾個極端的表達式例子:
!function foo(){} true && function foo(){}
以上的語句這里只是為了區(qū)分函數(shù)表達式,一般不會這樣寫。那么用一個對比的例子來看看效果:
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'); };
匿名函數(shù)表達式
var foo = function() {};
上面的例子將一個匿名函數(shù)賦值給了變量 foo。
foo; // 'undefined' foo(); // this raises a TypeError var foo = function() {};
由于 var 是一個聲明所以這里對變量 foo 進行 hoist (提升),因此當(dāng)程序執(zhí)行時,變量 foo 是可調(diào)用的。
但是由于賦值語句只有在運行時才生效,所以變量 foo 的值為 undefined。
命名函數(shù)表達式
另一個要講到的就是命名函數(shù)的賦值。
var foo = function bar() { bar(); // Works }; bar(); // ReferenceError
在這里,命名函數(shù) bar 賦值給了變量 foo,所以在函數(shù)聲明外是不可見的,但在 bar 函數(shù)內(nèi)部仍然可以調(diào)用。這是因為 Javascript 對命名函數(shù)處理的機制,函數(shù)的名稱永遠在函數(shù)內(nèi)部的作用域中有效。
- JavaScript中函數(shù)聲明與函數(shù)表達式的區(qū)別詳解
- 淺談javascript 函數(shù)表達式和函數(shù)聲明的區(qū)別
- JavaScript中函數(shù)表達式和函數(shù)聲明及函數(shù)聲明與函數(shù)表達式的不同
- 詳解JavaScript中的函數(shù)聲明和函數(shù)表達式
- js中函數(shù)聲明與函數(shù)表達式
- JavaScript中的函數(shù)聲明和函數(shù)表達式區(qū)別淺析
- 淺析javascript中函數(shù)聲明和函數(shù)表達式的區(qū)別
- javascript函數(shù)聲明和函數(shù)表達式區(qū)別分析
- javascript 函數(shù)聲明與函數(shù)表達式的區(qū)別介紹
- Javascript中的函數(shù)聲明與函數(shù)表達式(奇技淫巧)
- 理解 javascript 中的函數(shù)表達式與函數(shù)聲明
相關(guān)文章
JavaScript中使用concat()方法拼接字符串的教程
這篇文章主要介紹了JavaScript中使用concat()方法拼接字符串的教程,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-06-06JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之棧與隊列
在面向?qū)ο蟮某绦蛟O(shè)計里,一般都提供了實現(xiàn)隊列(queue)和堆棧(stack)的方法,而對于JS來說,我們可以實現(xiàn)數(shù)組的相關(guān)操作,來實現(xiàn)隊列和堆棧的功能,看下面的相關(guān)介紹.2016-01-01