js - 函數(shù)表達(dá)式 - 簡(jiǎn)要總結(jié)

函數(shù)聲明,函數(shù)表達(dá)式區(qū)別

1,函數(shù)聲明特點(diǎn)

  • 執(zhí)行前先聲明
  • 有函數(shù)名稱
  • 可以把調(diào)用語句放在函數(shù)聲明前

2, 函數(shù)表達(dá)式(匿名函數(shù)(anonymous function),拉姆達(dá)函數(shù))

  • 無函數(shù)名稱
  • 函數(shù)賦值給一個(gè)變量
  • 必須先賦值,在執(zhí)行
標(biāo)題 順序 備注
函數(shù)聲明 執(zhí)行-》 獲取聲明 -》 執(zhí)行 null
函數(shù)表達(dá)式 獲取值 -》在執(zhí)行 null

遞歸(調(diào)用自己)

遞歸函數(shù)是一個(gè)函數(shù)通過改名字調(diào)用自身的情況構(gòu)成的

function factorial(num){
    if (num <= 1){
        return 1;
    } else {
     return num * factorial(num-1);
    }
}

思考題目:
假設(shè)你正在爬樓梯。需要 n 階你才能到達(dá)樓頂。每次你可以爬 1 或 2 個(gè)臺(tái)階。
你有多少種不同的方法可以爬到樓頂呢?

閉包(通俗:函數(shù)中的函數(shù),可以訪問外面函數(shù)變量)

  • 閉包是一個(gè)有權(quán)訪問另一個(gè)函數(shù)變量的的函數(shù)
  • 創(chuàng)建閉包的常見方式,就是在一個(gè)函數(shù)內(nèi)部創(chuàng)建另一個(gè)函數(shù)
    function createComparisonFunction(age){
        return function(obj1, obj2){
            var value1 = obj1[age]
            var value2 = obj2[age]

            if(value1 > value2) {
                return -1;      
            } else {
                return 1
            }

        }
    }

    var compare = createComparisonFunction("name");
    var result = compare({ name: "Nicholas" }, { name: "Greg" });
    alert(result)

上面函數(shù)作用域鏈如下:

作用域鏈.png

可以這么畫作用域鏈:

  • 1,畫出 全局,局部函數(shù),閉包的參數(shù) 和 兩個(gè)執(zhí)行環(huán)境
  • 2,將執(zhí)行環(huán)境和 三部分進(jìn)行連接理解
閉包與變量

閉包只能取得包含函數(shù)中任何變量的最后一個(gè)值。

題目1:
下面這段代碼想要循環(huán)延時(shí)輸出結(jié)果 0 1 2 3 4,請(qǐng)問輸出結(jié)果是否正確,如果不正確,請(qǐng)說明為什么,并修改循環(huán)內(nèi)的代碼使其輸出正確結(jié)果?

var result = function() {
    for (var i = 0; i < 5; ++i) {
        (function (num) {
            setTimeout(function() {
                console.log(num + " ");
            }, 100);
        })(i)
        
    }
}
result()

題目2
如果想讓執(zhí)行依次加1怎么修改代碼?

function add() {
  var x = 1;
  console.log(++x);
}
add()  // 執(zhí)行輸出?
add()  // 執(zhí)行輸出?

this對(duì)象

名稱 描述
局部函數(shù) 基于函數(shù)的執(zhí)行環(huán)境綁定
全局函數(shù) this 等于 window
匿名函數(shù) 匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其 this 對(duì)象通常指向 window

思考
如何讓匿名函數(shù)this指向局部函數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??函數(shù)表達(dá)式是 JavaScript 中的一個(gè)既強(qiáng)大有容易令人困惑的特性。定義函數(shù)的的方式有兩種: 函數(shù)聲明; ...
    霜天曉閱讀 889評(píng)論 0 1
  • 第七章:函數(shù)表達(dá)式 本章內(nèi)容: 函數(shù)表達(dá)式的特征 使用函數(shù)實(shí)現(xiàn)遞歸 使用閉包定義私有變量 定義函數(shù)的方式有兩種,一...
    穿牛仔褲的蚊子閱讀 440評(píng)論 0 1
  • 定義函數(shù)的方式有兩種:函數(shù)聲明和函數(shù)表達(dá)式。 函數(shù)聲明的一個(gè)重要特征就是函數(shù)聲明提升,意思是在執(zhí)行代碼前會(huì)先讀取函...
    oWSQo閱讀 737評(píng)論 0 0
  • 定義函數(shù)的方式有兩種:一種是函數(shù)聲明,另一種就是函數(shù)表達(dá)式。函數(shù)聲明的語法: 關(guān)于函數(shù)聲明的一個(gè)重要特征就是函數(shù)聲...
    LemonnYan閱讀 128評(píng)論 0 0
  • 本文主要介紹,函數(shù)表達(dá)式特征、使用函數(shù)實(shí)現(xiàn)遞歸、使用閉包定義私有變量。 函數(shù)表達(dá)式特征 函數(shù)表達(dá)式是JavaScr...
    了凡和纖風(fēng)閱讀 1,262評(píng)論 0 0

友情鏈接更多精彩內(nèi)容