相信有过其他语言编程经验的读者都听说过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)