通过this article阅读关于今天与HN关联的JS编码员的良好面试问题,并进入以下部分:
接下来,我会问一些简单的问题,旨在向我展示如何 候选人理解论证对象。我先打电话来 尚未定义的
log
函数。
log('hello world')
然后我会要求候选人定义
log
它将其字符串参数代理为console.log()
。正确的答案是 这些方面的东西,但更好的候选人往往会跳过 直接使用apply
。
function log(msg){
console.log(msg);
}
一旦定义了,我改变了我调用
log
的方式,传递了多个 参数。我明确表示我希望log
采用任意数字 争论,而不仅仅是两个。我还暗示console.log
这个事实 也有多个论点。
log('hello', 'world');
作者解释他的解决方案的方式是通过apply
:
希望你的候选人能直接使用申请。有时 他们会因应用和通话之间的差异而被绊倒 你可以把它们推到正确的方向。通过
console
背景也很重要。
function log(){
console.log.apply(console, arguments);
};
我在这里log
函数利用apply
并隐式传递arguments
,以便像
log('hello', 'world');
将传递console.log.apply(console, ['hello', 'world'])
,但我的问题是:此示例中的console
上下文是什么,即上面apply
调用中的第一个参数,以及它来自何处?
答案 0 :(得分:2)
console
只是定义了log
函数的对象,在this
函数中基本上是log
,这就是它被传递的原因作为背景。 console
在浏览器中不是一个特殊的词,它只是一个保存在window.console
下的对象。