摘要:如下,一般在非嚴格模式下遞歸調用一般這樣使用但是如果代碼是在嚴格模式下開發結果在嚴格模式下不能通過腳本訪問訪問這個屬性會報錯,那么可以使用命名函數表達式來達到相同的結果以上代碼創建了一個名為的命名函數表達式,然后將它賦值給變量即是把函
如下,一般在非嚴格模式下遞歸調用一般這樣使用:
function factorial(num){ if(num<=1){ return 1; }else { return num * arguments.callee(num-1); } } console.log(factorial(4)); //24
但是如果代碼是在嚴格模式下開發:
"use strict"; function factorial(num){ if(num<=1){ return 1; }else { return num * arguments.callee(num-1); } } console.log(factorial(4));
結果:Uncaught TypeError: "caller", "callee", and "arguments" properties may not be accessed on strict mode functions or the arguments objects for calls to them
在嚴格模式下不能通過腳本訪問arguments.callee,訪問這個屬性會報錯,那么可以使用命名函數表達式來達到相同的結果:
"use strict"; var factorial = (function f(num){ if(num<=1){ return 1; }else { return num * f(num-1); } }) console.log(factorial(4)); //24
以上代碼創建了一個名為f()的命名函數表達式,然后將它賦值給變量factorial,即是把函數賦值給另外一個變量,函數的名字仍然有效。
在看一段代碼:
(function foo(bar) { if (bar) { return; } foo(true); })();
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89774.html
摘要:淺拷貝深拷貝淺拷貝的問題如果父對象的屬性等于數組或另一個對象,那么實際上,子對象獲得的只是一個內存地址,而不是真正拷貝,因此存在父對象被篡改的可能。 淺拷貝: function extendCopy(p) { var c = {}; for (var i in p) { c[i] = p[i]; } return c; } 深拷貝: function deepCopy(p...
摘要:反之亦然非嚴格合并嚴格看起來是非嚴格的。在普通的里面給一個拼寫錯誤的變量名賦值會使全局對象新增一個屬性并繼續工作盡管后面可能出錯在現在的中有可能。第三嚴格模式禁止刪除聲明變量。 文章整理自MSDN:https://developer.mozilla.org... 1.逐步使用嚴格模式 ECMAScript 5的嚴格模式是JavaScript中的一種限制性更強的變種方式。嚴格模式不是一個...
摘要:系列系列列表從看一與箭頭函數從看二函數傳參模式與的上一篇說到,對做了以下限定。是另外一個變量,指向不同的值,而這兩個值有相同的類型。函數中,和指向同一個值,更改的就等于更改了的。可以用改進問題是這個在嚴格模式下不能運行。 系列 系列列表:從use strict看JS(一):this與箭頭函數從use strict看JS(二):函數傳參模式與arguments use strict 的 ...
摘要:概述嚴格模式是什么嚴格模式是中的一種限制性更強的變種方式。在嚴格模式下,靜默失敗會轉為報錯。拋出錯誤非嚴格模式下靜默錯誤屬性名必須唯一在嚴格模式下,一個對象內的所有屬性名必須唯一。非嚴格模式最后一個重名參數會覆蓋之前的重名參數。 概述 嚴格模式是什么 嚴格模式是JavaScript中的一種限制性更強的變種方式。嚴格模式可以和非嚴格模式共存,所以腳本可以逐漸的選擇性加入嚴格模式。 嚴格模...
閱讀 3609·2021-11-15 11:37
閱讀 2974·2021-11-12 10:36
閱讀 4403·2021-09-22 15:51
閱讀 2381·2021-08-27 16:18
閱讀 882·2019-08-30 15:44
閱讀 2164·2019-08-30 10:58
閱讀 1769·2019-08-29 17:18
閱讀 3269·2019-08-28 18:25