为什么这里的f=1对结果没有影响???

yi_piao 2015-07-22 12:29:04

var factorial=function f(num){
if(num<=1){
return 1;
} else {
f=1;
return num*f(num-1);
}
}


console.log(factorial(4));
...全文
108 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yi_piao 2015-07-22
  • 打赏
  • 举报
回复
引用 6 楼 sydhr_1994 的回复:
这个代码应该是你在看javascript高级程序设计解决递归的一个方法吧, 这里的f只是给这个factorial变量赋值的匿名函数起到引用作用。 只可读不可写。
这样的表现也正常啊,会正常的报错:

function f(num){
    if(num<=1){
        return 1;
    } else {
        f=1;
        return num*f(num-1);
    }
}

var factorial=f;
console.log(factorial(4));
yi_piao 2015-07-22
  • 打赏
  • 举报
回复
引用 6 楼 sydhr_1994 的回复:
这个代码应该是你在看javascript高级程序设计解决递归的一个方法吧, 这里的f只是给这个factorial变量赋值的匿名函数起到引用作用。 只可读不可写。
那为什么下面这样的话就会报错:

function f(num){
    if(num<=1){
        return 1;
    } else {
        return num*f(num-1);
    }
}

var factorial=f;
f=1;
console.log(factorial(4));
sydhr_1994 2015-07-22
  • 打赏
  • 举报
回复
这个代码应该是你在看javascript高级程序设计解决递归的一个方法吧, 这里的f只是给这个factorial变量赋值的匿名函数起到引用作用。 只可读不可写。
yi_piao 2015-07-22
  • 打赏
  • 举报
回复
引用 1 楼 zhoucc910311 的回复:
这里的f是什么??没有定义,自然没有意义
f是函数表达式的函数名。。。。
引用 4 楼 xuzuning 的回复:
没有影响是错误的,不合常理的(不过 ie 是会报错的)
在chrome下测试是正常的,但是如果把f=1改为var f=1,就会报错,这是否跟作用域链有关,大神?如果有关,能解析一下吗??
友谊树下 2015-07-22
  • 打赏
  • 举报
回复
可能与 js 编译器行为有关? 在这里 f 是一个名字, 编译器内部将 f 映射为函数, 重定义该 f 不发生改变. 纯猜测, 也可能是 js 规范要求这样.
xuzuning 2015-07-22
  • 打赏
  • 举报
回复
没有影响是错误的,不合常理的(不过 ie 是会报错的)
  • 打赏
  • 举报
回复
f=1;改成num=1; 就会对结果产生影响了 f是你定义的function名 和值没关系
zhoucc910311 2015-07-22
  • 打赏
  • 举报
回复
这里的f是什么??没有定义,自然没有意义

87,955

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧