摘要:嚴(yán)格模式下,通常會采用內(nèi)聯(lián)命名函數(shù)來解決這個問題。使用內(nèi)聯(lián)方式調(diào)用,其本質(zhì)和函數(shù)表達(dá)式?jīng)]有太大不同,唯一的區(qū)別就是內(nèi)聯(lián)命名函數(shù)在函數(shù)內(nèi)部提供了一個僅僅可供自身調(diào)用的函數(shù)指針,該指針指向函數(shù)自身。
在使用JavaScript遞歸調(diào)用時,我們往往會在函數(shù)內(nèi)部調(diào)用函數(shù)自身(通過函數(shù)名),但是當(dāng)我們改變了定義時所用函數(shù)名的指向時,那么這個遞歸函數(shù)指針關(guān)聯(lián)的遞歸函數(shù)也將隨之失效。
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
在非嚴(yán)格模式下我們可以使用 num * arguments.callee(num - 1)來代替函數(shù)名。
嚴(yán)格模式下,通常會采用內(nèi)聯(lián)命名函數(shù)來解決這個問題。
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
這種方式的函數(shù)調(diào)用區(qū)別于下面這種方式:
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
給函數(shù)表達(dá)式的匿名函數(shù)命名并不會改變表達(dá)式的性質(zhì),即不會讓它變成一個函數(shù)聲明
var factorial = function f() { console.log(factorial == f); // true } factorial(); //true console.log(typeof f); // undefined f(); // Uncaught ReferenceError: f is not defined
上述代碼證明:盡管我們可以給內(nèi)聯(lián)函數(shù)命名,但是這些名稱只能在自身函數(shù)內(nèi)部才是可見的。使用內(nèi)聯(lián)方式調(diào)用,其本質(zhì)和函數(shù)表達(dá)式?jīng)]有太大不同,唯一的區(qū)別就是內(nèi)聯(lián)命名函數(shù)在函數(shù)內(nèi)部提供了一個僅僅可供自身調(diào)用的函數(shù)指針,該指針指向函數(shù)自身。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/82495.html
摘要:作用域和閉包是最重要的概念之一,想要進(jìn)一步學(xué)習(xí),就必須理解作用域和閉包的工作原理。全局和局部作用域的關(guān)系在函數(shù)體內(nèi),局部變量的優(yōu)先級高于同名的全局變量。作用域鏈的用途,是保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問。 作用域和閉包是 JavaScript 最重要的概念之一,想要進(jìn)一步學(xué)習(xí) JavaScript,就必須理解 JavaScript 作用域和閉包的工作原理。 作用域 任何...
摘要:只要沒有被覆蓋的話對象原型的屬性就能在所有的實例中找到,若整個原型鏈未找到則返回如何實現(xiàn)繼承構(gòu)造繼承原型繼承實例繼承拷貝繼承原型機(jī)制或和方法去實現(xiàn)較簡單,建議使用構(gòu)造函數(shù)與原型混合方式。 HTML相關(guān)問題 1.XHTML和HTML有什么區(qū)別 HTML是一種基本的WEB網(wǎng)頁設(shè)計語言,XHTML是一個基于XML的標(biāo)記語言最主要的不同:XHTML 元素必須被正確地嵌套。XHTML 元素必須被...
摘要:只要沒有被覆蓋的話對象原型的屬性就能在所有的實例中找到,若整個原型鏈未找到則返回如何實現(xiàn)繼承構(gòu)造繼承原型繼承實例繼承拷貝繼承原型機(jī)制或和方法去實現(xiàn)較簡單,建議使用構(gòu)造函數(shù)與原型混合方式。 HTML相關(guān)問題 1.XHTML和HTML有什么區(qū)別 HTML是一種基本的WEB網(wǎng)頁設(shè)計語言,XHTML是一個基于XML的標(biāo)記語言最主要的不同:XHTML 元素必須被正確地嵌套。XHTML 元素必須被...
摘要:只要沒有被覆蓋的話對象原型的屬性就能在所有的實例中找到,若整個原型鏈未找到則返回如何實現(xiàn)繼承構(gòu)造繼承原型繼承實例繼承拷貝繼承原型機(jī)制或和方法去實現(xiàn)較簡單,建議使用構(gòu)造函數(shù)與原型混合方式。 HTML相關(guān)問題 1.XHTML和HTML有什么區(qū)別 HTML是一種基本的WEB網(wǎng)頁設(shè)計語言,XHTML是一個基于XML的標(biāo)記語言最主要的不同:XHTML 元素必須被正確地嵌套。XHTML 元素必須被...
摘要:反之亦然非嚴(yán)格合并嚴(yán)格看起來是非嚴(yán)格的。在普通的里面給一個拼寫錯誤的變量名賦值會使全局對象新增一個屬性并繼續(xù)工作盡管后面可能出錯在現(xiàn)在的中有可能。第三嚴(yán)格模式禁止刪除聲明變量。 文章整理自MSDN:https://developer.mozilla.org... 1.逐步使用嚴(yán)格模式 ECMAScript 5的嚴(yán)格模式是JavaScript中的一種限制性更強(qiáng)的變種方式。嚴(yán)格模式不是一個...
閱讀 3428·2021-11-19 09:40
閱讀 1314·2021-10-11 11:07
閱讀 4846·2021-09-22 15:07
閱讀 2890·2021-09-02 15:15
閱讀 1964·2019-08-30 15:55
閱讀 539·2019-08-30 15:43
閱讀 883·2019-08-30 11:13
閱讀 1449·2019-08-29 15:36