现代js教程:执行上下文是一个内部数据结构,包含有关函数执行时的详细细节:当前控制流所在的位置,当前的变量,this的值,其他细节。
一个函数调用仅具有一个与其相关联的执行上下文。
1 let company = { // 是同一个对象,简洁起见被压缩了 2 sales: [{name: 'John', salary: 1000}, {name: 'Alice', salary: 1600 }], 3 development: { 4 sites: [{name: 'Peter', salary: 2000}, {name: 'Alex', salary: 1800 }], 5 internals: [{name: 'Jack', salary: 1300}] 6 } 7 };
- 创建一个名为company的对象
- company包含一个数组,叫做sales,sales数组中存放了两个对象。
- company包含一个对象,叫做development,development对象中又存放了两个数组:sites和internals。
- sites中存放了两个对象
- internals中存放了一个数组。
1 function sum(a){ 2 if(Array.isArray(a)){ 3 return a.reduce((prev,current)=>prev+current.salary,0); 4 } 5 else { 6 let sum1=0; 7 for(let v of Object.values(a)){ 8 sum1 +=sum(v); 9 } 10 return sum1; 11 } 12 }
- 如果是数组,则立即给出结果
- 如果是对象,则生成子调用