027 - 进阶函数-06 call stack 调用栈

相信有过其他语言编程经验的读者都听说过CallStack的概念。Javascript中的CallStack类似。

CallStack是一个栈结构,栈的特点是LIFO(后入先出),出栈入栈只会在一端(也就是栈顶)进行。

CallStack是用来处理函数调用与返回的。每次调用一个函数,Javascript运行时会生成一个新的调用结构压入CallStack。而函数调用结束返回时,JavaScript运行时会将栈顶的调用结构弹出。由于栈的LIFO特性,每次弹出的必然是最新调用的那个函数的结构。
Javascript启动时,从文件或标准输入加载程序。加载完成时,Javascript运行时会生成一个匿名的函数,函数体就是输入的代码。




浏览器自带的控制台调试



计算1+2+3+...n的函数算法

  function sum(n) {
    if (n == 1) {
      return 1
    } else {
      return n + sum.call(undefined, n - 1)
    }
  }
  sum.call(undefined, 5) // 5 + sum(5)
  //sum(4) // 4 + sum(3)
  //sum(3) // 3 + sum(2)
  //sum(2) // 2 + sum(1)
  //sum(1)

你可能感兴趣的:(027 - 进阶函数-06 call stack 调用栈)