JavaScript에서 대입 연산자가 (재) 바인딩이되도록 의도되었는지, 돌연변이가 아닌지 이해하려고합니다. 즉, 주어진 다음 두 번째 행의 값 20
인코딩 또는하도록 수정 될 값 10
를 인코딩 비트를 발생하는 경우JS의 대입 연산자가 (다시) 바인딩인지 또는 돌연변이입니까?
let x = 10;
x = 20;
이해하려는 - 대안 - x
경우 식별자는 20
값을 포함하도록 초기화 된 다른 (가능하면 새로운) 청크와 함께 리바운드됩니다.
후자의 대안은 내가 발견 한 일반적인 설명입니다 (예 : ECMA-262-5 in detail). 이 설명의 장점은 기본 유형을 변경 불가능한 값으로 표시하고 object
유형에서만 조작으로 변형을 제한 할 수 있다는 것입니다.
그러나 할당이 수행 될 때마다 다른 메모리 블록에 바인딩되는 아이디어는 이상하게 보입니다. 특히 C 및 C++와 같은 언어에서 동일한 작업이 수행되는 방식을 고려할 때 특히 그렇습니다. 실제로 C (및 C++)에서 할당은 변수 ID를 유지하면서 식별자와 관련된 비트에 변형을 발생시킵니다. 즉 :
int x = 10;
cout << &x << endl;
x = 20;
cout << &x << endl;
같은 주소가 인쇄됩니다. 다시 바인드하면 x
의 메모리 위치가 변경됩니다.
불행히도 표준에서 설명을 찾을 수 없습니다. 내가 의지 할 수있는 권한있는 소스가 있습니까? 대신에 이것은 벤더 종속적 인 경우가 가장 일반적인 방법입니까?
감사합니다.
편집 : "새로운 메모리 블록"을 언급하면서이 문장의 의미를 변경했습니다. 나는 대입 작전이 JS가 신분을 보존하는 것인지 이해하는 데 주로 관심이있다.
리 바인드 인 경우에도 올바른 의미가 유지되는 한 새 메모리 블록을 할당 할 필요가 없습니다. –
차이점을 어떻게 알 수 있습니까? – melpomene
@melpomene : 제 질문은 JS에서 assigment 연산자의 의미를 가장 충실하게 설명하는 방법에 관한 것입니다. 외부 적으로 두 가지 접근법은 각 변수의 메모리 위치를 검사 할 방법이 없다는 점을 고려할 때 아무런 차이가 없다. –