javascript에서는 범위를 전역 범위와 로컬 범위로 구분하는데, 로컬 범위는 실제로 함수 범위를 함수 범위의 최소 범위로 간주합니다.
객체, 예를 들어 윈도우 객체와 윈도우 객체의 속성 등 코드 어디에서나 접근할 수 있으며, 전역 범위를 갖습니다.
1. 가장 바깥쪽 레이어에 정의된 변수는 기본적으로 모두 창 개체의 속성입니다.
2. 정의되지 않은 변수는 기본적으로 창 개체의 속성입니다. 새 버전의 브라우저에서는 이 문제가 해결되었습니다!
예:
var firstName = "leo"; function changeName() { var secondName = "jut"; fullName = "jutleo"; function getName() { console.log(secondName); } getName(); } console.log(firstName); console.log(fullName);//报错 // console.log(secondName);//报错 changeName(); // getName();//报错
함수에서 변수를 정의할 때 이 변수는 현재 함수인 javascript에만 표시됩니다. 현재 함수의 범위를 검색하지 않으면 전역 범위에서 찾을 수 없을 때까지 위쪽으로 계속 검색하고 f1에서
var version = "version_1"; var f1 = function() { console.log(version);//version_1 } f1();
를 찾을 수 없습니다. 함수를 계속해서 위쪽으로 검색하게 됩니다
var version = "version_1"; var f2 = function() { var version = "version_2"; console.log(version);//version_2 } f2();
f2 함수에서 직접
var socpe = "scope_01"; var f3 = function() { console.log(scope); //undefined var scope = "scope_02"; } f3();
를 찾으세요. 왜 그럴까요? JavaScript는 f3 함수에서 범위 변수를 검색하여 찾는 것으로 나타났습니다. 이때 외부 범위는 무시되지만 실행이 console.log(scope)
에 도달하면 범위가 초기화되지 않았으므로 undefined
<을 반환합니다. 🎜>
var f4 = function() { var scope = "scope_02"; (function(){ var scope = "scope_03"; (function(){ console.log(scope); //scope_03 })(); })(); } f4();
아아아아
이게 왜죠? JavaScript 함수가 중첩되면 중첩 관계에 따라 범위가 결정되고 호출 순서는 무시됩니다! 말이 이렇게 많았는데 이 스코프를 어떻게 사용하나요? 위의 예를 보면 JavaScript가 변수를 검색할 때 순서대로 올라가는 체인이 스코프 체인이라는 것을 알 수 있습니다. 실제 응용 프로그램에서는 변수의 위치가 깊을수록 전역 범위에서 찾을 때까지 읽기 및 쓰기 속도가 느려집니다. 예제 보기:var x_scope = "leo"; var f5 = function() { console.log(x_scope); //leo } var f6 = function() { var x_scope = "jut"; f5(); } f6();
function setLabelBgColor(){ document.getElementById("btn").onclick=function(){ document.getElementById("label").style.backgroundColor="red"; }; }
function setLabelBgColor(){ var doc = document; doc.getElementById("btn").onclick=function(){ doc.getElementById("label").style.backgroundColor="red"; }; }
위 내용은 JavaScript 고급 기능 - 범위 샘플 코드 세부정보의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!