关于在对象字面量中声明函数并递归调用它

发布于 2022-09-06 01:28:53 字数 1082 浏览 13 评论 0

一开始我在对象字面量中声明了一个函数,在这个函数里面我想递归调用它本身,代码如下:


(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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一袭水袖舞倾城 2022-09-13 01:28:54
(function () {

    var temp = {

        func: function (x) {
            if (x === 6) {
                return x
            }
            return temp.func(x + 1)
        }

    }

    console.log(temp.func(1))

})()
羁客 2022-09-13 01:28:54

var f = function f(x) {

if (x === 1) {  
    return 1;  
} else {  
    return x * f(x - 1);  
}  

};
var fn2 = f;
f = null;
console.log(fn2(1)); // OK
你看看这个能不能帮助到你,arguments.callee是一个已经准备被弃用的属性,在ECMAscript 5中"use strict"时,不能使用arguments.callee。一个建议:如果要声明一个递归函数,请慎用new Function这种方式,Function构造函数创建的函数在每次被调用时,都会重新编译出一个函数,递归调用会引发性能问题。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文