변수가 향상된 구덩이와 대상 키 값 복사 방식은?
var obj_out = {"a": 1, "obj_in": obj}
var obj = {"a": 2, "fun": function(){console.log(this.a)}}
try{
obj_out.obj_in.fun()
}catch(err){
console.error(err)//TypeError
}
console.log(typeof obj_out.obj_in)//undefined
????????????????????????????????????????????????? 변수가 올라간 냄비인 것 같아서 검증을 해봤습니다.
var obj = {"a": 1, "fun": function(){console.log(this.a)}}
var obj_out = {"a": 6, "obj_in": obj}
obj_out.obj_in.fun()//1
분석: 앞의 학습을 통해 알 수 있듯이 자바스크립트에서 그의 코드는 운행을 시작하기 전에 먼저 문법 분석을 하고 이어서 문법 분석을 한 다음에 운행을 시작한다.코드가 실행되기 전에 컴파일러는 모든 성명을 먼저 찾아서 해당하는 위치에 놓는다는 것을 더욱 명확하게 했다.구체적인 세부 사항은 앞의 한 문장을 볼 수 있는데 이런 현상을 변수 향상 현상이라고 부른다.여기에 대응하는 예는 다음과 같다. 운행하기 전에obj와objout는undefined로 승급되지만 a,fun,obj인아, 이거 안 올라갈 거야.이어서 실행을 시작합니다. 첫 번째 행 코드를 실행할 때 엔진은 작용역에 대해 LHS 조회obj를 발동합니다. 향상된 원인으로 인해 이를 찾을 수 있기 때문에 값을 부여합니다. 속성 a의 값은 1이고 속성objin의 값은obj이다. 이때 엔진은 RHS 조회obj를 발동한다. 현재 역할 영역에서 찾을 수 있기 때문에 이때 찾은 값을 이용한다. 변수가 상승한 후에undefined의obj이다. 이곳의 RHS 조회는 값을obj 에 복사하는 것일 뿐이다.obj 대신 in 속성in은 obj를 가리키는데 만약 가리키면 후속 조작을 거친 후에undefined가 되지 않는다.그러면 어떻게 여기가 얕은 복사가 아니라 깊은 복사라는 것을 증명합니까?
다음은 글자의 양을 이용하여 대상을 구축할 때와 대상에 동태적으로 속성을 추가할 때 대상의 속성이 가리키는 값을 인용할 때 유형의 대상을 인용한다면 인용 유형의 대상이라는 값을 특정한 속성에 부여할 때 깊이 있는 복사를 이용한다는 것을 증명한다.
var fun = function(){console.log("jiajishuiji")}
var obj = {"a": 1, "fun": fun}
fun = function(){console.log("jiagoushuigou")}
obj.fun()//"jiajishuiji"
var fun2 = function(){console.log("before")}
var obj2 = {}
obj2.fun = fun2
fun2 = function(){console.log("after")}
obj2.fun()//"before"
위의 예를 통해 알 수 있듯이 대상의 속성 값이 인용 형식의 값이라면 대상의 키와value를 연결할 때 깊은 복사를 이용한다.
사실 자세히 생각해 보면 여기는 깊이와 얕은 복사와 관련된 문제가 없다.'obj in'의 값은undefined이고 이것은 비인용 유형의 값이기 때문이다. 비인용 유형의 값에 대해 말하자면 그 복사 행위는 단지 하나의 표현이다. 그것이 바로 깊이 복사이다.
하나를 들면 열을 안다: 아래의 이 예를 봐라
var obj = {"fun": foo}
function foo(){console.log("hihi")}
obj.fun()
위의 결과는 무엇입니까?정답은'하이하이'입니다. 여기도 변수가 향상되었지만 변수는 원래 가지고 있어야 할 유형인 함수 유형으로 향상되었습니다.
END
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.