最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript學(xué)習(xí)筆記之 函數(shù)篇(一) : 函數(shù)聲明和函數(shù)表達(dá)式

 更新時間:2014年06月24日 09:20:24   投稿:hebedich  
function 是 Javascript 中的第一類對象,這就意味著函數(shù)可以像其他值一樣被傳遞。一個最常見的用法就是將一個匿名函數(shù)作為回調(diào)函數(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() {}

因?yàn)槲掖蛩銓iT寫篇介紹作用域的文章,所以這里就不詳述了。

函數(shù)表達(dá)式

對于函數(shù)聲明,函數(shù)的名稱是必須的,而對于函數(shù)表達(dá)式而言則是可選的,因此,就出現(xiàn)了匿名函數(shù)表達(dá)式和命名函數(shù)表達(dá)式。如下:

函數(shù)聲明: function functionName (){  }
函數(shù)聲明: function functionName[可選](){  }
那么我就知道,如果沒有函數(shù)名的話,一定就是函數(shù)表達(dá)式,但是對于有函數(shù)名的情況該如何判斷呢?
Javascript 規(guī)定如果整個函數(shù)體是作為表達(dá)式的一部分時,那么它就是函數(shù)表達(dá)式,否則即是函數(shù)聲明。以下為表達(dá)式:

var fuc = foo(){}

我們再舉幾個極端的表達(dá)式例子:

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

以上的語句這里只是為了區(qū)分函數(shù)表達(dá)式,一般不會這樣寫。那么用一個對比的例子來看看效果:

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ù)表達(dá)式

var foo = function() {};

上面的例子將一個匿名函數(shù)賦值給了變量 foo。

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

由于 var 是一個聲明所以這里對變量 foo 進(jìn)行 hoist (提升),因此當(dāng)程序執(zhí)行時,變量 foo 是可調(diào)用的。
但是由于賦值語句只有在運(yùn)行時才生效,所以變量 foo 的值為 undefined。

命名函數(shù)表達(dá)式

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

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

在這里,命名函數(shù) bar 賦值給了變量 foo,所以在函數(shù)聲明外是不可見的,但在 bar 函數(shù)內(nèi)部仍然可以調(diào)用。這是因?yàn)?Javascript 對命名函數(shù)處理的機(jī)制,函數(shù)的名稱永遠(yuǎn)在函數(shù)內(nèi)部的作用域中有效。

相關(guān)文章

最新評論

长葛市| 平谷区| 元江| 武安市| 仙桃市| 怀仁县| 阳江市| 台州市| 射洪县| 和顺县| 汝城县| 盐津县| 云林县| 磐安县| 平乐县| 儋州市| 兴文县| 邛崃市| 唐河县| 上高县| 平江县| 蓬莱市| 江门市| 卢氏县| 陆川县| 湘潭县| 四平市| 台北县| 镇沅| 太白县| 榆林市| 乐陵市| 乡宁县| 玉树县| 太和县| 张家港市| 连山| 霍邱县| 鄂尔多斯市| 永城市| 八宿县|