素材牛VIP会员
JavaScript Function类型aguments的一点疑惑
 zh***ni  分类:JavaScript  人气:814  回帖:2  发布于6年前 收藏

1.上图:

为了降低函数中的耦合度,我采用了arguments.callee指向当前函数。
这里的 return num*arguments.callee(num-1) 等价于 return num*factorial(num-1)
好处是无论引用函数时使用的是什么名字都可以保证正常完成调用。
我为了测试是否真的如此,就把factorial函数给重写了返回0;
问题来了:当使用表达式把一个函数赋值factorial变量时确实成功了:一个函数返回0,另一个函数返回120;
当使用函数声明的方式定义factorial函数同样返回0时,却两个函数都返回0;
函数表达式和函数声明的问题还是其他问题?

 标签:javascript

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv6 码匠
yj***23 站长 6年前#1

因为函数声明会被提前

你以为是这样的:

function factorial (num) {
  if (num <= 1) 
  // ...
}
var factorial_1 = factorial;

function factorial (num) {
  return 0
}

其实是这样的

function factorial (num) {
  if (num <= 1) 
  // ...
}

function factorial (num) {
  return 0
}

var factorial_1 = factorial;
Lv6 码匠
Ho***95 UI设计师 6年前#2

函数声明提前的锅

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取