在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 函數(shù)聲明與表達(dá)式
arguments 對(duì)象
類型轉(zhuǎn)換
構(gòu)造函數(shù)
instanceof 操作符
自動(dòng)分號(hào)插入
為什么不要使用 eval
對(duì)象使用和屬性
作用域與命名空間
this 的工作原理
typeof 操作符
相等與比較
閉包和引用
數(shù)組遍歷與屬性
Array 構(gòu)造函數(shù)
原型
hasOwnProperty 函數(shù)
undefined 和 null
函數(shù)聲明與表達(dá)式
setTimeout 和 setInterval
for in 循環(huán)

函數(shù)聲明與表達(dá)式

函數(shù)是JavaScript中的一等對(duì)象,這意味著可以把函數(shù)像其它值一樣傳遞。 一個(gè)常見的用法是把匿名函數(shù)作為回調(diào)函數(shù)傳遞到異步函數(shù)中。

函數(shù)聲明

    function foo() {}

上面的方法會(huì)在執(zhí)行前被解析(hoisted),因此它存在于當(dāng)前上下文的任意一個(gè)地方, 即使在函數(shù)定義體的上面被調(diào)用也是對(duì)的。

    foo(); // 正常運(yùn)行,因?yàn)閒oo在代碼運(yùn)行前已經(jīng)被創(chuàng)建
    function foo() {}

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

    var foo = function() {};

這個(gè)例子把一個(gè)匿名的函數(shù)賦值給變量 foo。

    foo; // 'undefined'
    foo(); // 出錯(cuò):TypeError
    var foo = function() {};

由于 var 定義了一個(gè)聲明語(yǔ)句,對(duì)變量 foo 的解析是在代碼運(yùn)行之前,因此 foo 變量在代碼運(yùn)行時(shí)已經(jīng)被定義過(guò)了。

但是由于賦值語(yǔ)句只在運(yùn)行時(shí)執(zhí)行,因此在相應(yīng)代碼執(zhí)行之前, foo 的值缺省為undefined

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

另外一個(gè)特殊的情況是將命名函數(shù)賦值給一個(gè)變量。

    var foo = function bar() {
        bar(); // 正常運(yùn)行
    }
    bar(); // 出錯(cuò):ReferenceError

bar 函數(shù)聲明外是不可見的,這是因?yàn)槲覀円呀?jīng)把函數(shù)賦值給了 foo; 然而在 bar 內(nèi)部依然可見。這是由于 JavaScript 的命名處理所致, 函數(shù)名在函數(shù)內(nèi)總是可見的。

注意:在IE8及IE8以下版本瀏覽器bar在外部也是可見的,是因?yàn)闉g覽器對(duì)命名函數(shù)賦值表達(dá)式進(jìn)行了錯(cuò)誤的解析, 解析成兩個(gè)函數(shù) foobar