小tips:JS严格模式(use strict)下不能使用arguments.callee的替代方案
2017-09-12 14:31
543 查看
在函数内部,有两个特殊的对象:arguments 和 this。其中, arguments 的主要用途是保存函数参数, 但这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 arguments 对象的函数。
如下,一般在非严格模式下递归调用一般这样使用:
但是如果代码是在严格模式下开发:
结果:
在严格模式下不能通过脚本访问
以上代码创建了一个名为f()的命名函数表达式,然后将它赋值给变量
在看一段代码:
如下,一般在非严格模式下递归调用一般这样使用:
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); })();
相关文章推荐
- js的隐含参数(arguments,callee,caller)使用方法
- js的隐含参数(arguments,callee,caller)使用方法
- js的隐含参数(arguments,callee,caller)使用方法
- JS中的“use strict” 严格模式
- js严格模式——arguments变为参数的静态副本
- js的隐含参数(arguments,callee,caller)使用方法
- js的隐含参数(arguments,callee,caller)使用方法
- 是否该使用严格模式?use strict
- JS中使用arguments.callee实现匿名函数的递归
- 浅谈js严格模式 use strict
- js严格模式“use strict”
- JS函数的参数对象arguments在严格模式下的限制
- JS中使用arguments.callee实现匿名函数的递归
- js的隐含参数(arguments,callee,caller)使用方法
- js--严格模式 'use strict'
- js中的 "use strict" 做了什么?使用严格模式有什么优点
- js的隐含参数(arguments,callee,caller)使用方法
- JS中使用arguments.callee实现匿名函数的递归
- js中的arguments,apply,call,callee,caller
- 对于不允许使用开源标签进行select选中的js替代方法