为了账号安全,请及时绑定邮箱和手机立即绑定

javascript较难问题

javascript较难问题

imooc_hcy 2015-09-25 00:45:14
var factorial=(function f(num){ if(num<=1)return 1; else{ return num*f(num-1); } }); f=null; var value=factorial(5); document.write(value);请问,我已经把f设为null了,为何还能正常输出。应该如何理解?function f(num){     if(num<=1)return 1;     else{     return num*f(num-1);     } } var factorial=f; f=null; var value=factorial(5); document.write(value);请问,f与factorial都是指向函数的指针吗,若是为何前者f被清空了之后仍然能用呢?再具体一点的问题,f与factorial都是存储在栈中的吗?
查看完整描述

5 回答

已采纳
?
Y_du

TA贡献43条经验 获得超5个赞

当然有区别,程序中的东西应该先定义后使用。

var factorial=f;
f=null;

这样写就错了,因为f在没有被定义的时候就使用了。只是其一,因为这个f没加()所以它也不是函数f()

var value=factorial(5); 同样,这个factorial是个变量,它可以等于任何东西,但是它不可能接受任何参数,var value=factorial(5);也是无效的,也调用不了f()这个函数

查看完整回答
反对 回复 2015-09-25
  • imooc_hcy
    imooc_hcy
    我已经用function关键字加函数名f的方法对函数进行了定义啊,不是说函数名其实是存储函数地指的指针吧?
?
imooc_hcy

TA贡献2条经验 获得超0个赞

此题已经找到答案,谢谢各位的热心!

查看完整回答
反对 回复 2015-09-27
?
Kusoku

TA贡献14条经验 获得超5个赞

函数体内部调用自身,这是个递归,f=null以后在num*f(num-1)这个地方,此时f不是函数了,这个调用表达式执行期出错,你可以把f改成arguments.callee,指向调用函数本身,这样就不会出错了。

查看完整回答
反对 回复 2015-09-25
?
imooc_hcy

TA贡献2条经验 获得超0个赞

您知道吗?谢谢

查看完整回答
反对 回复 2015-09-25
?
Y_du

TA贡献43条经验 获得超5个赞

你这的f与num*f(num-1);一点关系都没有,num*f(num-1);调用的是f()这个函数,而不是使用f这个变量。

查看完整回答
反对 回复 2015-09-25
  • imooc_hcy
    imooc_hcy
    ​function f(num){ if(num<=1)return 1; else{ return num*f(num-1); } }; var factorial=f; f=null; var value=factorial(5); document.write(value); 那这种和上在的f的区别是什么啊?请大神指教
  • imooc_hcy
    imooc_hcy
    这两个在计算机内部的储存机理是什么?
  • Y_du
    Y_du
    这个我说的不是很清楚,如果你关系这个。我建议你去先去看看java的,javascript不是很关系 这个。比较js只是脚本语言
点击展开后面1
  • 5 回答
  • 0 关注
  • 1745 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信