摘要:如下,一般在非严格模式下递归调用一般这样使用但是如果代码是在严格模式下开发结果在严格模式下不能通过脚本访问访问这个属性会报错,那么可以使用命名函数表达式来达到相同的结果以上代码创建了一个名为的命名函数表达式,然后将它赋值给变量即是把函
如下,一般在非严格模式下递归调用一般这样使用:
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); })();
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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中的一种限制性更强的变种方式。严格模式可以和非严格模式共存,所以脚本可以逐渐的选择性加入严格模式。 严格模...
阅读 3545·2021-11-15 11:37
阅读 2944·2021-11-12 10:36
阅读 4321·2021-09-22 15:51
阅读 2346·2021-08-27 16:18
阅读 857·2019-08-30 15:44
阅读 2126·2019-08-30 10:58
阅读 1716·2019-08-29 17:18
阅读 3229·2019-08-28 18:25