在函数内部,有两个特殊的对象:arguments 和 this。其中, arguments 的主要用途是保存函数参数, 但这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 arguments 对象的函数。

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

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);
})();

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

  1. 点位拍照打卡完成任务小程序JavaScript 严格模式(use strict)

    </head> <body><h2>全局 "use strict" 声明.</h2> <p>浏览器按下 F12 开启调试 ...

  2. 小tips:JS之浅拷贝与深拷贝

    浅拷贝: function extendCopy(p) {var c = {};for (var i in p) {c[i] = p[i];}return c; } 深拷贝: function dee ...

  3. JS中的严格模式(Strict Mode)

    什么是严格模式? 严格模式是ECMAScript5的新特性,它是采用具有限制性JavaScript变体的一种方式,从而使代码隐式地脱离"马虎模式/稀松模式/懒散模式"(sloppy ...

  4. php childnodes,小tips:HTML DOM中的children和childNodes属性

    childNodes 属性 标准的,childNodes 属性返回节点的子节点集合,以 NodeList 对象.包括HTML节点,所有属性,文本.可以通过nodeType来判断是哪种类型的节点,只有当 ...

  5. js纯ajax,自动完成JS类(纯JS, Ajax模式)

    自动完成JS类(纯JS, Ajax模式) 更新时间:2009年03月12日 23:51:15   作者: 自动完成JS类,用户体验较好.封装成类,方便使用.本站 一. 封装的JS文件 //****** ...

  6. 前端防错以及好用小tips指南总结

    @前端防錯以及好用小tips指南總結 1.一般情況下我們接收到的都是對象格式,某些情況下,需要接到後端傳過來的奇怪的字符串格式的JSON,需要解析成對象,但是有時候他們傳過來的格式有問題,會報錯 解決 ...

  7. css3vw适配_小tips:使用rem+vw实现简单的移动端适配

    首先设置meta属性,如下代码: 使用如下代码就能实现移动端的适配: html { font-size: -webkit-calc(13.33333333vw); font-size: calc(13 ...

  8. JS异步模式与Promise模式

    JS异步模式与Promise模式 - 转 引子 异步模式在web编程中变得越来越重要,对于web主流语言Javascript来说,这种模式实现起来不是很利索,为此,许多Javascript库(比如 j ...

  9. 不定期备考小tips[数模][0] #20210529

    不定期备考小tips[数模][0] #20210529 边值问题 S-L微分方程中两种内积的理解 一种内积:(u,v)=∫uvdx(u,v)=\int uvdx(u,v)=∫uvdx 另一种内积:(u ...

最新文章

  1. Coreseek:indexer crashed神秘
  2. 利用人脑神经突触进行网络模型剪枝
  3. WINDOWS XP常用的快捷键组合?
  4. 【前端Talkking】CSS系列-css3之box-shadow介绍
  5. java设计模式之简单工厂模式
  6. 通过Xcode断点集成 reveal(2017-10-20更新)
  7. 潭州Java中级班(day_05)
  8. 站长工具箱浏览器插件-SEO分析效率工具插件
  9. 剖析微软Hyper-V的最佳部署方式
  10. flume学习(十):如何使用Spooling Directory Source
  11. githup找回被删除的文件
  12. 映射可以多对一吗_【高中数学集合与映射】(一)整数和有理数“一样多”?...
  13. 卸载SQL server后,本地文件无法删除
  14. 二进制计算机在线使用,二进制计算器
  15. 蓝桥杯 算法训练 - 连续正整数的和 78这个数可以表示为连续正整数的和,1+2+3,18+19+20+21,25+26+27。   输入一个正整数 n(<=10000)   输出 m 行(n有m
  16. [NKNY]寒假培训《NY寒假有奖欢乐赛 》总结
  17. 年轻CEO自杀离世,杠杆之殇背后的故事
  18. node-inspector调试node程序
  19. 无线网的dhcp服务器是什么,关于DHCP服务里的路由器地址租期什么意思
  20. 基于动力学模型的无人驾驶车辆MPC轨迹跟踪算法及carsim+matlab联合仿真学习笔记

热门文章

  1. 生产环境故障处理之nginx缓存权限问题
  2. spring boot配置写法
  3. Tomcat指定特定JDK版本
  4. 虚拟化 - 每天5分钟玩转 OpenStack(2)
  5. DNS and BIND
  6. 网络编程常见问题总结
  7. php 函数:func_get_args()、func_get_arg()与func_num_args()
  8. 安全配置交换机端口 提高网络安全性
  9. zookeeper 分布式计数器
  10. 洛谷P2234 [HNOI2002]营业额统计(01Tire树)