栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

递归调用javascript函数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

递归调用javascript函数

使用命名函数表达式:

您可以为函数表达式指定一个实际上是 私有 的名称,并且只有在函数内部才能看到:

var factorial = function myself (n) {    if (n <= 1) {        return 1;    }    return n * myself(n-1);}typeof myself === 'undefined'

下面

myself
该函数的可见里面只有 自己。

您可以使用此私有名称来递归调用该函数。

请参阅[

13. FunctionDefinition
ECMAscript 5规范:

可以从Functionexpression的FunctionBody内部引用Functionexpression中的标识符,以允许该函数以递归方式调用自身。但是,与FunctionDeclaration中的功能不同,Functionexpression中的Identifier不能从中引用,也不会影响包围Functionexpression的范围。

请注意,版本8之前的InternetExplorer的行为不正确,因为该名称实际上在封闭的变量环境中可见,并且它引用了实际功能的副本(请参见下面的_patrick dw_ 的注释)。

使用arguments.callee:

或者,您可以

arguments.callee
用来引用当前函数:

var factorial = function (n) {    if (n <= 1) {        return 1;    }    return n * arguments.callee(n-1);}

ECMAscript的第五版禁止在严格模式下使用arguments.callee(),但是:

(来自MDN):在常规代码中arguments.callee指的是封闭函数。这种用例很弱:只需命名封闭函数即可!此外,arguments.callee实质上阻碍了诸如内联函数之类的优化,因为如果访问arguments.callee,必须使其能够提供对未内联函数的引用。严格模式功能的arguments.callee是不可删除的属性,在设置或检索时会抛出该属性。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402623.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号