国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

理解JavaScript內聯命名函數---var fun = function f() {}

olle / 2026人閱讀

摘要:嚴格模式下,通常會采用內聯命名函數來解決這個問題。使用內聯方式調用,其本質和函數表達式沒有太大不同,唯一的區別就是內聯命名函數在函數內部提供了一個僅僅可供自身調用的函數指針,該指針指向函數自身。

在使用JavaScript遞歸調用時,我們往往會在函數內部調用函數自身(通過函數名),但是當我們改變了定義時所用函數名的指向時,那么這個遞歸函數指針關聯的遞歸函數也將隨之失效。
    var factorial = function (num) {
        if (num <= 1) {
            return 1;
        } else {
            return num * factorial(num - 1);
        }
    };
    console.log(factorial(5)); // 120;
    var anothorFactorial = factorial;
    factorial = null;
    console.log(anothorFactorial(5)); // Uncaught TypeError: factorial is not a function

在非嚴格模式下我們可以使用 num * arguments.callee(num - 1)來代替函數名。
嚴格模式下,通常會采用內聯命名函數來解決這個問題。

    var factorial = (function f(num) {
        if (num <= 1) {
            return 1;
        } else {
            return num*f(num - 1);
        }
    });
    console.log(factorial(5)); // 120
    var anothorFactorial = factorial;
    factorial = null;
    console.log(anothorFactorial(5)); // 120

這種方式的函數調用區別于下面這種方式:

     function f(num) {
        if (num <= 1) {
            return 1;
        } else {
            return num*f(num - 1);
        }
    };
    var factorial = f;
    var anothorFactorial = factorial;
    factorial = null;
    console.log(anothorFactorial(5)); // 120
    f = null;
    console.log(anothorFactorial(5)); // Uncaught TypeError: f is not a function

給函數表達式的匿名函數命名并不會改變表達式的性質,即不會讓它變成一個函數聲明

    var factorial = function f() {
        console.log(factorial == f); // true
    }

    factorial(); //true
    console.log(typeof f); // undefined
    f(); // Uncaught ReferenceError: f is not defined

上述代碼證明:盡管我們可以給內聯函數命名,但是這些名稱只能在自身函數內部才是可見的。使用內聯方式調用,其本質和函數表達式沒有太大不同,唯一的區別就是內聯命名函數在函數內部提供了一個僅僅可供自身調用的函數指針,該指針指向函數自身。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/82495.html

相關文章

  • JavaScript 闖關記》之作用域和閉包

    摘要:作用域和閉包是最重要的概念之一,想要進一步學習,就必須理解作用域和閉包的工作原理。全局和局部作用域的關系在函數體內,局部變量的優先級高于同名的全局變量。作用域鏈的用途,是保證對執行環境有權訪問的所有變量和函數的有序訪問。 作用域和閉包是 JavaScript 最重要的概念之一,想要進一步學習 JavaScript,就必須理解 JavaScript 作用域和閉包的工作原理。 作用域 任何...

    Jacendfeng 評論0 收藏0
  • 前端面試經典題目匯總(持續更新中)

    摘要:只要沒有被覆蓋的話對象原型的屬性就能在所有的實例中找到,若整個原型鏈未找到則返回如何實現繼承構造繼承原型繼承實例繼承拷貝繼承原型機制或和方法去實現較簡單,建議使用構造函數與原型混合方式。 HTML相關問題 1.XHTML和HTML有什么區別 HTML是一種基本的WEB網頁設計語言,XHTML是一個基于XML的標記語言最主要的不同:XHTML 元素必須被正確地嵌套。XHTML 元素必須被...

    BigNerdCoding 評論0 收藏0
  • 前端面試經典題目匯總(持續更新中)

    摘要:只要沒有被覆蓋的話對象原型的屬性就能在所有的實例中找到,若整個原型鏈未找到則返回如何實現繼承構造繼承原型繼承實例繼承拷貝繼承原型機制或和方法去實現較簡單,建議使用構造函數與原型混合方式。 HTML相關問題 1.XHTML和HTML有什么區別 HTML是一種基本的WEB網頁設計語言,XHTML是一個基于XML的標記語言最主要的不同:XHTML 元素必須被正確地嵌套。XHTML 元素必須被...

    Warren 評論0 收藏0
  • 前端面試經典題目匯總(持續更新中)

    摘要:只要沒有被覆蓋的話對象原型的屬性就能在所有的實例中找到,若整個原型鏈未找到則返回如何實現繼承構造繼承原型繼承實例繼承拷貝繼承原型機制或和方法去實現較簡單,建議使用構造函數與原型混合方式。 HTML相關問題 1.XHTML和HTML有什么區別 HTML是一種基本的WEB網頁設計語言,XHTML是一個基于XML的標記語言最主要的不同:XHTML 元素必須被正確地嵌套。XHTML 元素必須被...

    Tony_Zby 評論0 收藏0
  • 那些年,前端學習之路的疑難雜癥(一):嚴格模式與非嚴格模式

    摘要:反之亦然非嚴格合并嚴格看起來是非嚴格的。在普通的里面給一個拼寫錯誤的變量名賦值會使全局對象新增一個屬性并繼續工作盡管后面可能出錯在現在的中有可能。第三嚴格模式禁止刪除聲明變量。 文章整理自MSDN:https://developer.mozilla.org... 1.逐步使用嚴格模式 ECMAScript 5的嚴格模式是JavaScript中的一種限制性更強的變種方式。嚴格模式不是一個...

    zombieda 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<