TypeError : console.log.apply에서 잘못된 호출


129

크롬 콘솔에서이를 실행하는 경우 :

console.log.apply(null, [array])

Chrome에서 오류가 발생했습니다.

// TypeError: Illegal Invocation

왜? (OSX를 통해 Chrome 15에서 테스트)

답변:


180

실행 컨텍스트가 콘솔에서 다른 오브젝트로 변경된 경우에는 작동하지 않을 수 있습니다.

console.info는 "this"참조가 window가 아닌 ​​console 일 것으로 예상하기 때문입니다.

console.info("stuff")
stuff
undefined
console.info.call(this, "stuff")
TypeError: Illegal invocation
console.info.call(console, "stuff")
stuff
undefined

이 동작이 예상됩니다.

https://bugs.chromium.org/p/chromium/issues/detail?id=48662


25
함수로 사용해야한다면 console.info.bind (console)을 사용할 수 있습니다
John Williams

3
console.info.call(console, "stuff")ES5를 지원하는 모든 브라우저에서 사용할 수 있습니까?
mucaho

2
동일하게 적용됩니다 :console.info.apply(console, arguments)
PeterM

console.log () 및 document.writeln ()과 같은 다른 함수에도 동일한 인수가 적용됩니다. 따라서 call () 또는 apply ()를 사용하는 경우 항상 올바른 실행 컨텍스트를 제공하십시오. 또는 @JohnWilliams가 지적했듯이 bind ()를 사용하십시오.
Alan CS

1
DevTools F12가 열려 있지 않은 경우에도 IE11 / Edge에 적용됩니다.
베니 보 테마
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.