전문가분들은 이미 알고 계시겠지만 이 두 가지는 여전히 가치가 있다고 생각하여 여기서 공유하겠습니다
다음 코드가 있습니다:
>
이 함수를 호출하면 무엇이 출력되나요? 정의되지 않은 팝업이 나타날 것이라고 생각할 수도 있지만 실제로는 JavaScript의 변수 범위 개념과 관련된 "an url" 문자열이 팝업됩니다.
JS에서 각 범위에는 현재 범위에서 정의된 식별자를 저장하는 해당 "변수 개체"(이런 식으로 부르는 것이 정확하지 않을 수 있습니다. 그런 것이 있다는 것만 알아두세요)가 있습니다. JS 프로그램이 시작되면 전역 범위에 들어갑니다. 우리 프로그램에서는 테스트 함수가 전역 범위에 정의되어 있으므로 여기서 "변수 개체"는 테스트 함수의 식별자를 저장합니다. 다음으로, 테스트 함수를 호출하고 테스트 함수의 범위에 들어갔습니다. 테스트 함수 자체의 범위에도 테스트 범위에 들어갈 때 전역 범위에 저장된 범위가 있습니다. 식별자가 복사되므로 전역 범위에 정의된 식별자는 테스트 함수에서 액세스할 수 있지만 내부 내용은 외부 범위에서 볼 수 없습니다. 이 경우 temp가 내부 범위에 정의되어 있으므로 여기에서 경고(temp)는 정의되지 않음을 출력합니다. 그런데 여기서 내부 범위에 정의된 식별자를 찾을 수 있는 이유는 무엇입니까?
with 문 블록의 범위의 "변수 개체"는 읽기 전용이므로 현재 레이어에 정의된 식별자는 이 레이어에 저장할 수 없고 상위 수준 범위, 즉 The 테스트 함수의 범위에 따라 경고(temp) 문이 내부적으로 정의된 임시 변수에 액세스할 수 있습니다. try catch 문에서도 동일한 상황이 발생합니다.
자바스크립트에는 문장 블록 개념이 없습니다.
if (true) {
var temp = "oh";
}
alert(temp)
매우 간단한 줄 코드의 일반적인 프로그래밍 언어 경험에 따르면 경고 문이 오류를 보고할 것이라고 생각하지만 경고 문은 일반적으로 "oh"라는 문자열을 출력하므로 개념이 없습니다.
Javascript의 명령문 블록입니다.
위의 두 가지 예는 매우 간단합니다. 많은 전문가가 이미 이해했을 것입니다. 그러나 이 두 가지 기능은 여전히 유용할 것입니다. JS에서는 오류가 발생할 가능성이 적으므로 JS를 작성할 때 모든 사람에게 도움이 되기를 바라며 여러분과 공유하기 위해 계속 게시합니다.