[已解决]JavaScript递归函数求阶乘的一个疑问?
?来自《高程三》:
var factorial = (function f(num){
console.info(typeof f);
if (num <= 1){
return 1;
} else {
return num * f(num-1);
}
});
console.info(typeof factorial);// function
console.info(typeof f);// undefined
factorial(1);// function
问题:为什么找不到f
变量,这个函数对象的作用域是什么范围?怎么主动销毁?
感谢网友!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
函数表达式了解一下。
不过文档中只是举例描述了
typeof f === "undefined"
这个结果,并没有说明为什么可以这样理解下:
带名称函数表达式只是给函数定义了名称,即
f.name
,但并没有为这个表达式生成变量引用,所以主要是这个函数命名的方式有些诡异:
这样好理解,
typeof factorial
自然就是function
了。这样也好理解,
typeof f
也是function
。但是下面这种形式:
这种形式叫作
命名函数表达式(Named Function Expression)
,其中function f() {}
是个表达式
,而不是语句
,var factorial = function f() {}
才是个完整的语句
。函数表达式(Function Expression)
通常是匿名
的,但是也可以为其提供一个名字,但该名字只能用于该函数内部,用于指向函数自身
,所以在递归中比较常见。所以这个不是
函数对象
作用域的问题,也不涉及销毁,而是这个f
仅限于函数内部,外部无法访问。