交互式 JavaScript 面试练习
执行上下文面试实验室
使用 DeepJS 执行可视化器练习真实的 JavaScript 面试题,先预测输出结果,再一步步追踪结果究竟是如何产生的。
共 31 题,显示 31 题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
- 开始解题
为什么调用 arguments[0]() 会让 this.length 读到 3?
this 绑定高级
通过成员表达式调用一个值时,this 会绑定到这个表达式是从哪个对象上读出来的——哪怕那个对象是当前调用自己的 arguments 对象。
- 开始解题
- 开始解题
- 开始解题
这四种 this 里,.call() 到底能覆盖哪几种?
this 绑定高级
普通方法、对象字面量里的箭头属性、以及两个"返回函数的函数",各自解析 this 的方式都不一样——其中一个甚至从来没有真正执行过 console.log。
- 开始解题
在构造函数里挂载的方法,还遵循调用点规则吗?
this 绑定高级
在构造函数内部写 this.foo = function(){...},只是改变了这个函数挂在哪里,并不会改变它自己的 this 之后如何被解析——调用点规则仍然说了算。
- 开始解题
把对象嵌套多一层,会改变 this 的解析方式吗?
this 绑定高级
通过 person1.obj.foo1() 这样的路径调用到的方法,this 依然是从调用点解析出来的——多一层属性访问并不会自带一个接收者。
- 开始解题
当四条 this 规则同时出现,到底谁说了算?
this 绑定高级
默认绑定、隐式绑定,以及全部三种显式绑定形式——call、apply、bind——再加上 new 和一个箭头函数,全部串在一条链路上,让每条规则"覆盖上一条"的过程在同一个 trace 里清清楚楚地展示出来。