✍️ Tangxt | ⏳ 2020-06-10 | 🏷️ JS面试题 |
function fun(n, o) {
console.log(o);
return {
fun: function (m) {
return fun(m, n);
}
};
}
var c = fun(0).fun(1);
c.fun(2);
c.fun(3);
分析:
fun(0)
0x102.fun(1)
fun(m,n)
-> 0x101(m,n)
c.fun(2)
-> 0x103.fun(2)
fun(m,n)
c.fun(3)
-> log出来的o值就是上一次调用fun所传的参数2
我觉得老师出的这个题肯定会在生产环境里边用得上!
输出结果:
规律? -> 调用fun
能够拿到上一次调用fun
的传参?
测试自己是否正确?
undefined -> 0 -> 1 -> 1 -> 结果我错了……
为啥错了?因为自己误认为 c.fun(3)
是0x104
调用的!c
还是原来那个0x103
考察点:作用域链
定义函数的时候如果是嵌套着的,那么在内存里边可不是嵌套着的,而是扁平的……说白了,都是独立的……
我们定义的时候嵌套着,意味函数执行的时候,那么其作用域链就会指向该函数定义时所在的那个作用域,即那个VO/AO