아래 코드에서는 배열의 각 항목에 대해 새로운 실행 컨텍스트가 생성됩니까, 아니면 실행 컨텍스트는 동일하게 유지되고 어휘 환경의 환경 레코드만 업데이트됩니까?
코드에서 오류가 발생하지 않으므로 실행 컨텍스트와 독립적으로 새 범위(어휘 환경)가 생성된다고 가정하지만 맞는지 잘 모르겠습니다.
으으으으P粉6748763852024-04-02 23:22:53
표준 라이브러리 함수에 제공되는 콜백에는 특별한 것이 없습니다. 그것들은 여전히 함수이고 일반적인 함수 호출 방식으로 호출됩니다.
네. 함수를 호출할 때마다(이 경우 forEach
에서 콜백을 호출할 때) 새로운 실행 컨텍스트가 생성됩니다.
(이 경우)는 새로운 실행 컨텍스트를 생성하는 것과 별개가 아닙니다. 함수 호출을 위한 표준 절차의 일부로.
반대로 for-of
루프를 생각해 보세요:
여기서 호출할 콜백 함수는 없습니다. 루프 본문은 단지 블록입니다. 그러나 블록 범위 의미론이 정의되는 방식으로 인해 각 루프 반복마다 새로운 어휘 환경 개체가 생성됩니다. 이는 forEach
回调类似,每次循环迭代都有一个新的 foo
,即使不需要函数调用。 (如果您要在该块内创建事件处理程序或类似的事件处理程序,这非常方便。)(如果我们使用 var
代替,则不会每次都有一个新的,var
会跳出该块到周围函数作用域或全局作用域,因为 var
不是块作用域。这是我建议永远不要在新代码中使用 var
콜백과 유사하게 함수 호출이 필요하지 않은 경우에도 루프 반복마다 새로운 foo
가 있음을 의미합니다. (이것은 블록 내부에 이벤트 핸들러나 유사한 이벤트 핸들러를 생성하려는 경우 매우 편리합니다.) (대신 var
를 사용하면 매번 새로운 이벤트 핸들러가 생성되지 않습니다. < code>var 는 블록에서 주변 함수 범위나 전역 범위로 이동합니다. var
는 블록 범위가 아니기 때문입니다. 이는 새 코드에서 var
이유 중 하나)