arguments.callee是否仍然可以安全使用,或者是否有更好的选择
Is arguments.callee still safe to use or is there a better alternative
我正在分析我正在阅读的一本书中的一些代码,有一小段让我有点困惑:
//... some code
setTimeout(function(){
//...some code
if(some condition)
setTimeout(arguments.callee, 0);
}, 0);
让我有点困惑的是,同一本书提到"callee"属性已被弃用,除非绝对必要,否则不应使用它(我正在解释)。所以我想知道这是否是其中一种情况,或者是否有更好的方法来完成递归调用。我在互联网上的某个地方读到以下内容可能会完成同样的事情:
//... some code
setTimeout(function myRecursiveFunction(){
//...some code
if(some condition)
setTimeout(myRecursiveFunction, 0);
}, 0);
这是对的吗?有没有更好的方法来解决这个问题?继续使用 arguments.callee 是否安全且可以?
感谢您的任何澄清。
第二种方法是最好的。它实际上所做的是将函数声明"提升"到最近的封闭作用域(定义它的函数)的顶部,并将函数命名为"myRecursiveFunction"。
另一种方法是创建一个匿名范围,如下所示:
setTimeout(
(function(){
var myRecursiveFunction = function() {
console.log(myRecursiveFunction);
};
return myRecursiveFunction
}),
1000
)
或者可能使用函数式编程中的定点组合器。
arguments.callee
已被弃用,可以删除。
它还使浏览器更难优化代码。
你的第二种方法是正确的。
创建具有名称的匿名函数(函数表达式)时,函数表达式中的代码可以访问该名称。
相关文章:
- 如何知道javascript for语句中的所有结果是否都是错误的
- 检查输入是否都是数字html javascript
- 未能构造'Blob':提供的第一个参数为null,或者是无效的Array对象
- 在提交表单和显示消息之前,如何检查表单输入是否全是数字
- 如何在不包括当前日期的情况下检查日期是否不是过去
- 检查字符串中的字符是否都是唯一的
- FB登录API - 检查用户是否实际上是用户
- 是否可以使用主干模型的 cid 作为 html id 属性?它是否保证是独一无二的
- 如何检查 JavaScript 对象是否直接是“{}”实例,而不是子类
- 检查数组中的所有元素是否都是字符串
- 持续时间为零的css转换是否仍然是硬件加速的
- 我如何检查一个变量是否不是null,也不是数字
- 知道角度是否可以是北、南的最快代码;西方或东方
- if(x<Infinity)是检查x是否不是NaN并且可以强制为数字的最佳方法
- 角度隔离范围值可以通过“;真“;或者是空的
- Javascript:确定数组中的所有元素是否都是对象中的键
- Javascript:确定字符串中的所有字符是否都是唯一的,如果不是,则删除重复字符
- 该节点/快递路由如何完成更新?或者是这样
- 如果我在javascript中创建一个只包含异步函数的函数,那么新函数是否也是异步的
- 如何判断播放HTML5音频是否真的是在制造声音