资讯专栏INFORMATION COLUMN

小tips:JS严格模式(use strict)下不能使用arguments.callee的替代方案

longmon / 2360人阅读

摘要:如下,一般在非严格模式下递归调用一般这样使用但是如果代码是在严格模式下开发结果在严格模式下不能通过脚本访问访问这个属性会报错,那么可以使用命名函数表达式来达到相同的结果以上代码创建了一个名为的命名函数表达式,然后将它赋值给变量即是把函

如下,一般在非严格模式下递归调用一般这样使用:

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

相关文章

  • tipsJS之浅拷贝与深拷贝

    摘要:浅拷贝深拷贝浅拷贝的问题如果父对象的属性等于数组或另一个对象,那么实际上,子对象获得的只是一个内存地址,而不是真正拷贝,因此存在父对象被篡改的可能。 浅拷贝: function extendCopy(p) {  var c = {};  for (var i in p) {    c[i] = p[i];  }  return c; } 深拷贝: function deepCopy(p...

    Soarkey 评论0 收藏0
  • 那些年,前端学习之路疑难杂症(一):严格模式与非严格模式

    摘要:反之亦然非严格合并严格看起来是非严格的。在普通的里面给一个拼写错误的变量名赋值会使全局对象新增一个属性并继续工作尽管后面可能出错在现在的中有可能。第三严格模式禁止删除声明变量。 文章整理自MSDN:https://developer.mozilla.org... 1.逐步使用严格模式 ECMAScript 5的严格模式是JavaScript中的一种限制性更强的变种方式。严格模式不是一个...

    zombieda 评论0 收藏0
  • 严格模式

    摘要:严格模式创设了第三种作用域作用域。正常模式下,指向全局对象,如果绑定的值是非对象,将被自动转为对象再绑定上去,而和这两个无法转成对象的值,将被忽略严格模式 概述 严格模式是ES5进入标准的目的是为了: 明确禁止一些不合理 不严谨的语法 减少JS语言的一些怪异行为 增加更多报错的场合 保证代码运行的安全 提高编译效率 增加运行速度 为新版的JS语法做铺垫 如何开启 使用一段字符串...

    Yi_Zhi_Yu 评论0 收藏0
  • use strictJS(二):函数传参模式arguments

    摘要:系列系列列表从看一与箭头函数从看二函数传参模式与的上一篇说到,对做了以下限定。是另外一个变量,指向不同的值,而这两个值有相同的类型。函数中,和指向同一个值,更改的就等于更改了的。可以用改进问题是这个在严格模式下不能运行。 系列 系列列表:从use strict看JS(一):this与箭头函数从use strict看JS(二):函数传参模式与arguments use strict 的 ...

    kycool 评论0 收藏0
  • javascript - 严格模式

    摘要:概述严格模式是什么严格模式是中的一种限制性更强的变种方式。在严格模式下,静默失败会转为报错。抛出错误非严格模式下静默错误属性名必须唯一在严格模式下,一个对象内的所有属性名必须唯一。非严格模式最后一个重名参数会覆盖之前的重名参数。 概述 严格模式是什么 严格模式是JavaScript中的一种限制性更强的变种方式。严格模式可以和非严格模式共存,所以脚本可以逐渐的选择性加入严格模式。 严格模...

    PrototypeZ 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<