2
A
답변
3
평가 방법은 동일하지만 결과는 동일합니다. 구상 할 가장 관련성있는 순수 CS 모델은 environment model입니다. 간단히 말해서, 진술이 평가 될 때, 그것은 그 당시의 참조를 돌연변이시킬 수있다. 이러한 돌연변이는 JS의 스코프 체인을 통해 관리되지만, 이는 본질적으로 위의 환경에 대한 또 다른 이름입니다.
2
은 대체 모델은 자바 스크립트가 순수 코드를 평가하는 방법에 근접하는 좋은 방법이 있나요?
물론!
let f = x => x * 2
let g = x => f(x) + 1
let h = x => g(x) > 3
h(2)
// = ...
// substitute h with its definition
(x => g(x) > 3) (2)
// substitute x with 2
g(2) > 3
// substitute g with its definition
(x => f(x) + 1) (2) > 3
// substitute x with 2
f(2) + 1 > 3
// substitute f with its definition
(x => x * 2) (2) + 1 > 3
// substitute x with 2
2 * 2 + 1 > 3
// apply * to 2 and 2
4 + 1 > 3
// apply + to 4 and 1
5 > 3
// apply > to 5 and 3
true
는 내 코드에 대체 모델을 적용하는 방법을 이해 -이 JS 런타임 (등 V8은) 그것을 평가하는 방법을 실제 어떻게 다른지 내 질문입니다.
귀하의 질문은 사용하는 자바 스크립트 인 evaluation strategy입니다 - 자바 스크립트는 call by sharing 사용하지만, 물론 당신은 아직 평가 전략을 공유함으로써 호출을 사용하여 응답 에 도달하기 위해 대체 모델을 사용할 수 있습니다.
대체 모델은 한 전략을 다른 전략보다 강요하지 않습니다. 사실 (거의) 모든 경우에 순수한 함수를 사용하는 경우 평가 전략은 중요하지 않습니다. 대답은 동일합니다.
* * * * JS 런타임에 따라 다릅니다. JIT가 함수 호출을 인라인하기로 결정했는지 여부에 달려 있습니다. 많은 것들에 달려 있습니다. 내 추측 *은 아니오 : 나는 시스템 프로그래머가 아니지만 정신적으로 기본적인 C++을 작성하는 방법을 통해 걷는다면 그 구현으로 이어지지 않는다. –