>  기사  >  웹 프론트엔드  >  자바스크립트의 스코프 체인에 대한 자세한 설명

자바스크립트의 스코프 체인에 대한 자세한 설명

黄舟
黄舟원래의
2017-09-28 11:11:341286검색

이 글은 자바스크립트가 스코프 체인에 미치는 영향에 대한 자세한 설명을 중심으로 관련 정보를 소개합니다. 이 부분을 이해하고 익히는 데 도움이 되길 바랍니다. 범위 체인에 대한 javascript의 영향

1. JavaScript 범위

모든 프로그래밍 언어에는 범위라는 개념이 있습니다. 간단히 말해서 범위는 변수와 함수의 접근 가능한 범위입니다. 즉, 범위는 변수의 가시성과 가시성을 제어합니다. 그리고 기능. JavaScript에는 전역 범위와 로컬 범위라는 두 가지 유형의 변수 범위가 있습니다.

전역 범위

코드 내 어디에서나 액세스할 수 있는 개체에는 전역 범위가 있습니다. 일반적으로 다음 상황에 전역 범위가 있습니다.

(1) 가장 바깥쪽 함수 및 가장 바깥쪽 함수 외부에 정의된 변수에는 전역 범위가 있습니다.

예:


var authorName="Burce_zxy";
function doSomething(){
var blogName="旅行的意义zxy";
function innerSay(){alert(blogName);
}
innerSay();
}
alert(authorName); //Bruce_zxyalert(blogName); //脚本错误doSomething(); //旅行的意义zxyinnerSay() //脚本错误

(2) 정의되지 않고 값이 직접 할당된 모든 변수는 자동으로 전역 범위를 갖도록 선언됩니다. 예:


function doSomething()
{
var authorName="Bruce_zxy";
blogName="旅行的意义zxy";
alert(authorName);
}
alert(blogName); //旅行的意义zxyalert(authorName); //脚本错误

blogName 변수에는 전역 범위가 있습니다. 그러나 AuthorName은 함수 외부에서 액세스할 수 없습니다.

(3) 창 개체의 모든 속성에는 전역 범위가 있습니다.

일반적으로 창 개체의 내장 속성에는 window.name, window.location, window.top 등과 같은 전역 범위가 있습니다.

로컬 범위

전역 범위와 달리 로컬 범위는 일반적으로 고정된 코드 조각 내에서만 액세스할 수 있으며 가장 일반적인 코드 조각은 함수 내부에 있으며 일부 위치에서도 볼 수 있습니다. 어떤 사람들은 이 범위를 호출합니다. 예를 들어 다음 코드의 blogName 및 innerSay 함수에는 로컬 범위만 있습니다.


function doSomething()
{
var blogName="旅行的意义zxy";
function innerSay(){alert(blogName);
}innerSay();
}
alert(blogName);


2. 스코프 체인

JavaScript에서는 함수도 객체입니다. 사실 JavaScript의 모든 것은 객체입니다. 다른 개체와 마찬가지로 함수 개체에는 코드를 통해 액세스할 수 있는 속성과 JavaScript 엔진에서만 액세스할 수 있는 내부 속성 집합이 있습니다. 내부 속성 중 하나는 ECMA-262 표준 제3판에 정의된 [[Scope]]입니다. 이 내부 속성에는 함수가 생성되는 범위의 개체 컬렉션이 포함됩니다. , 함수에서 액세스할 수 있는 데이터를 결정합니다.

함수가 생성되면 해당 범위 체인은 함수가 생성된 범위에서 액세스할 수 있는 데이터 개체로 채워집니다. 예를 들어 다음 함수를 정의합니다.


function add(num1,num2) 
{
var sum = num1 + num2;
return sum;
}

add 함수가 생성되면 모든 전역 변수를 포함하는 범위 체인에 전역 개체가 채워집니다. 아래 그림과 같이 (참고: 그림은 모든 변수의 일부만 나타냅니다.):

전역 변수

실행 중에는 add 함수의 범위가 사용됩니다. 예를 들어 다음 코드를 실행합니다.

var total = add(5,10);

이 함수를 실행하면 "실행 컨텍스트"라는 내부 개체가 생성됩니다. 런타임 컨텍스트는 함수가 실행될 때의 환경을 정의합니다. 각 런타임 컨텍스트에는 식별자 확인을 위한 자체 범위 체인이 있습니다. 런타임 컨텍스트가 생성되면 해당 범위 체인은 현재 실행 중인 함수의 [[Scope]]에 포함된 개체로 초기화됩니다. 값은 함수에 나타나는 순서대로 런타임 컨텍스트의 범위 체인에 복사됩니다. 이들은 함께 "활성화 개체"라는 새 개체를 형성합니다. 이 개체에는 모든 로컬 변수, 명명된 매개 변수, 매개 변수 컬렉션 및 이 개체가 런타임 시 범위 체인의 프런트 엔드로 푸시됩니다. 컨텍스트가 파괴되면 활성 객체도 파괴됩니다. 새 범위 체인은 아래 그림에 표시됩니다.

새 범위 체인

함수 실행 중에 변수가 발견되지 않으면 식별자 확인 프로세스를 거쳐 데이터를 얻고 저장할 위치를 결정합니다. . 이 프로세스는 범위 체인의 헤드, 즉 활성 개체에서 시작하여 동일한 이름의 식별자를 찾습니다. 발견되지 않으면 이 식별자에 해당하는 변수를 사용합니다. 범위 체인에서 다음 개체를 검색합니다. 검색 후 개체가 발견되지 않으면 식별자가 정의되지 않은 것으로 간주됩니다. 기능이 실행되는 동안 각 식별자는 이러한 검색 과정을 거칩니다.

위 내용은 자바스크립트의 스코프 체인에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.