首页 > 开发 > JS > 正文

JS作用域,应该怎么理解这个代码呢,传递进入的3是赋值给i还是a

2017-09-05 05:51:31  来源:网友分享
var factorial = function factorial (i,a){    a = a ||1;    if(i<2){    return a;    }    return factorial(i-1,a *i);};document.writeln(factorial(3));

解决方案

首先第一次调用factorial函数只传入了一个实参3,所以3是赋值给了i

  1. 第一次进入factorial函数:

    i是传入来的3,a没有值-->运行完a=a||1后,a=1
    判断i是否小于2,3不小于2,不执行if里面的代码
    返回一个第二次factorial调用,传入两个实参:

       第一个参数 i-1 :2   第二个参数 i*a :3
  2. 第二次进入factorial函数
    i是第一个传过来的实参数字2;a是第二个传过来的实参3,这时a有值-->执行a=a||1后a依然等于3,
    同样2不小于2,不符合判断,不执行if里面的代码,
    返回第三次factorial函数调用,传入两个实参:

       第一个参数 i-1 :1   第二个参数 i*a :6   
  3. 第三次进入factorial函数
    i是第一个传过来的实参数字1;a是第二个传过来的实参6,这时a有值-->执行a=a||1后a依然等于6,
    判断,此时i<2成立,返回a,a等于6;
    运行结束

    所以结果是6,没有作用域的问题,只是函数循环调用,这是递归,可以百度一下js递归方面的知识,望采纳