1

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가 신분을 보존하는 것인지 이해하는 데 주로 관심이있다.

+0

리 바인드 인 경우에도 올바른 의미가 유지되는 한 새 메모리 블록을 할당 할 필요가 없습니다. –

+2

차이점을 어떻게 알 수 있습니까? – melpomene

+0

@melpomene : 제 질문은 JS에서 assigment 연산자의 의미를 가장 충실하게 설명하는 방법에 관한 것입니다. 외부 적으로 두 가지 접근법은 각 변수의 메모리 위치를 검사 할 방법이 없다는 점을 고려할 때 아무런 차이가 없다. –

답변

0

할당은 이전과 다른 값을 보유하는 변수의 변형입니다. 그 값이 메모리 청크에 저장된 유일한 변수의 내용으로 참조 또는 변수 자체의 내용에 부호화되었는지 여부

정말 그러한 1020 불변 프리미티브 값 차이를 만들지 않는다 .

그러나 개체 값은 명시 적으로 참조이며, 연결된 문서에도 표시되어 있습니다.

메모리의 새로운 블록을 할당이 수행 될 때마다 할당의 아이디어는 실제로 일이 결코

이상한 보인다. 할당이 참조를 변경하는 경우 일지라도 참조 된 메모리 (값 포함)는 할당 전에 이미 존재합니다.

관련 문제