关于在对象字面量中声明函数并递归调用它
一开始我在对象字面量中声明了一个函数,在这个函数里面我想递归
调用它本身,代码如下:
(function () {
var temp = {
func: function (x) {
if (x === 6) {
return x
}
func(x + 1)
}
}
console.log(temp.func(1))
})()
结果运行直接报func is undefined
,我想应该是在这个函数里面func
函数名是不可见的关系,后来我把代码改成了如下:
(function () {
var temp = {
func: function (x) {
if (x === 6) {
return x
}
arguments.callee(x + 1)
}
}
console.log(temp.func(1))
})()
以及如下:
(function () {
var temp = {
func: function (x) {
(function fn(x){
if(x === 6){
return x
}
fn(x + 1)
})(x)
}
}
console.log(temp.func(1))
})()
我的问题:以上两种结果控制台都显示undefined
,有人能告诉我为什么会出错吗?感谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
var f = function f(x) {
};
var fn2 = f;
f = null;
console.log(fn2(1)); // OK
你看看这个能不能帮助到你,arguments.callee是一个已经准备被弃用的属性,在ECMAscript 5中"use strict"时,不能使用arguments.callee。一个建议:如果要声明一个递归函数,请慎用new Function这种方式,Function构造函数创建的函数在每次被调用时,都会重新编译出一个函数,递归调用会引发性能问题。