JavaScript 변수의 역할 영역 전체 분석

7402 단어
변수 역할 영역 은 프로그램 에서 이 변 수 를 정의 하 는 영역 입 니 다.먼저 예 시 를 살 펴 보 자.
/*  코드 1  */

var scope = "global ";
function checkScope() {
 var scope = "local ";
 function childCheck() {
  var scope = "childLocal ";
  document.write(scope);
 }
 function childUndefined() {
  document.write(scope);
  var scope;
 }
 function childOverride() {
  scope = "childOverride ";
  document.write(scope);
 }
 document.write(scope); //  "local"
 childCheck();   //  "childLocal"
 childUndefined();  //  "undefined"
 childOverride();  //  "childOverride"
 document.write(scope); //  "childOverride"
}
checkScope();    //  "local childLocal undefinedchildOverride childOverride"
document.write(scope);  //  "global "

전역 작용 역 과 국부 작용 역 전역 (global) 변수의 작용 역 은 전역 적 이 고 자 바스 크 립 트 에서 곳곳에 정의 가 있다.한편, 함수 내부 성명 의 변 수 는 국부 (local) 변수 이 고 그 역할 영역 은 국부 적 이 며 함수 체 내부 에서 만 정의 된다.아래 의 수출 독자 에 게 는 의외 라 고 생각 하지 않 을 것 이다. / *  코드 2  */

var scope = "global";
function checkScope() {
 var scope = "local";
 document.write(scope);
}
checkScope();   //  "local"
document.write(scope); //  "global"

전역 변수 역할 영역 에서 변 수 를 사용 하면 var 문 구 를 사용 하지 않 아 도 됩 니 다. 그러나 국부 변 수 는 반드시 var 문 구 를 사용 해 야 합 니 다. 그렇지 않 으 면 전역 변수 에 대한 참조 로 볼 수 있 습 니 다.다음 코드 를 보십시오: / *  코드 3  */

var scope = "global";
function checkScope() {
 scope = "local";
 document.write(scope);
}
checkScope();   //  "local"
document.write(scope); //  "local"

블록 역할 영역 이 없 는 자바 script 은 블록 급 역할 영역 이 없 으 며 함수 에서 설명 하 는 변 수 는 전체 함수 에서 정의 되 어 있 습 니 다.아래 의 코드 는 생소 한 독자 들 에 게 상당히 의외 일 수 있 습 니 다. / *  코드 4  */

var scope = "global";
function checkScope() {
 document.write(scope); //  4.1
 var scope = "local"; //  4.2
 document.write(scope);
}
checkScope();   //  "undefinedlocal"

문장 4.1 (var scope = "local";) 성명 의 변 수 는 전체 checkScope 함수 역할 영역 에서 유효 하기 때문에 문장 4.2 (document. write (scope);) 에서 실 행 될 때 scope 는 부분 변 수 를 인용 합 니 다. 이때 부분 변 수 는 scope 가 정의 되 지 않 았 기 때문에 출력 "undefined" 입 니 다.따라서 좋 은 프로 그래 밍 습관 은 모든 변수 성명 을 함수 의 시작 에 집중 하 는 것 이다.
상술 한 내용 을 이해 한 후에 독자 가 코드 1 을 다시 보면 곤 혹 스 럽 지 않 을 것 이다.대상 의 속성 변수 대상 의 속성 변 수 는 쉽게 이해 할 수 있 습 니 다. 아래 코드 를 보면 독자 들 이 의심 하지 않 을 것 입 니 다. / *  코드 5  */

var scope = "global ";
var obj = new Object();
obj.scope = "object ";
obj.checkScope = function () {
 var scope = "loacl ";
 document.write(scope);   //  "loacl"
 document.write(this.scope);  //  "object"
 document.write(window.scope); //  "global"
}
obj.checkScope(); //  "loacl object global"

역할 영역 이란 이 변 수 는 코드 블록 에서 의 유효 범위 입 니 다.자 바스 크 립 트 역할 영역 을 이해 하지 못 하면 코드 를 디 버 깅 할 때 어 려 울 수 있 습 니 다.
함수 에서 var 로 변 수 를 설명 하면 이 변수의 역할 도 메 인 은 이 함수 내부 에 만 국한 되 고 함수 밖의 코드 는 이 변 수 를 방문 할 수 없습니다.이 함수 에서 함 수 를 하나 더 설명 하면 이 내부 함수 도 이 변 수 를 방문 할 수 있 습 니 다.
반대로 변 수 를 설명 할 때 var 를 사용 하지 않 으 면 이 변수의 역할 영역 은 이 함수 에 국한 되 지 않 습 니 다.자 바스 크 립 트 엔진 은 이 변수 가 정의 되 었 는 지 전역 적 으로 검사 합 니 다.만약 이 변수 가 정의 되 지 않 았 다 면, 그것 은 전역 변수 로 정 의 될 것 이다.
함수 가 같은 역할 영역 에 접근 할 수 있 는 변수:

var foo = 'hello';

var sayHello = function() {
 console.log(foo);
};

sayHello();   // logs 'hello'
console.log(foo); // also logs 'hello'


변수 역할 영역 이외 의 코드 는 이 변수 에 접근 할 수 없습니다.

var sayHello = function() {
 var foo = 'hello';
 console.log(foo);
};

sayHello();   // logs 'hello'
console.log(foo); // doesn't log anything


도 메 인 이름 이 같은 변 수 를 사용 하지 않 고 값 이 다 릅 니 다:

var foo = 'world';

var sayHello = function() {
 var foo = 'hello';
 console.log(foo);
};

sayHello();   // logs 'hello'
console.log(foo); // logs 'world'


함수 가 정 해진 후에 함수 내 변수 값 의 변 화 를 볼 수 있 습 니 다.

var myFunction = function() {
 var foo = 'hello';

 var myFn = function() {
  console.log(foo);
 };

 foo = 'world';

 return myFn;
};

var f = myFunction();
f(); // logs 'world' -- haha


역할 영역 도 통과 - 폐쇄

//           
(function() {
 var baz = 1;
 var bim = function() { alert(baz); };
 bar = function() { alert(baz); };
})();

console.log(baz); //           baz

bar(); //    bar         var
  //    bar        ;   ,
  // bar   baz            ,
  //    bar      baz
  //    bar       

bim(); // bim              ,
  //         

종합 하 다
역할 영역 이란 이 변 수 는 코드 블록 에서 의 유효 범위 입 니 다.자 바스 크 립 트 역할 영역 을 이해 하지 못 하면 코드 를 디 버 깅 할 때 어 려 울 수 있 습 니 다.
함수 에서 var 로 변 수 를 설명 하면 이 변수의 역할 도 메 인 은 이 함수 내부 에 만 국한 되 고 함수 밖의 코드 는 이 변 수 를 방문 할 수 없습니다.이 함수 에서 함 수 를 하나 더 설명 하면 이 내부 함수 도 이 변 수 를 방문 할 수 있 습 니 다.
반대로 변 수 를 설명 할 때 var 를 사용 하지 않 으 면 이 변수의 역할 영역 은 이 함수 에 국한 되 지 않 습 니 다.자 바스 크 립 트 엔진 은 이 변수 가 정의 되 었 는 지 전역 적 으로 검사 합 니 다.만약 이 변수 가 정의 되 지 않 았 다 면, 그것 은 전역 변수 로 정 의 될 것 이다.
함수 가 같은 역할 영역 에 접근 할 수 있 는 변수:

var foo = 'hello';

var sayHello = function() {
 console.log(foo);
};

sayHello();   // logs 'hello'
console.log(foo); // also logs 'hello'


변수 역할 영역 이외 의 코드 는 이 변수 에 접근 할 수 없습니다.

var sayHello = function() {
 var foo = 'hello';
 console.log(foo);
};

sayHello();   // logs 'hello'
console.log(foo); // doesn't log anything


도 메 인 이름 이 같은 변 수 를 사용 하지 않 고 값 이 다 릅 니 다:

var foo = 'world';

var sayHello = function() {
 var foo = 'hello';
 console.log(foo);
};

sayHello();   // logs 'hello'
console.log(foo); // logs 'world'


함수 가 정 해진 후에 함수 내 변수 값 의 변 화 를 볼 수 있 습 니 다.
 

var myFunction = function() {
 var foo = 'hello';

 var myFn = function() {
  console.log(foo);
 };

 foo = 'world';

 return myFn;
};

var f = myFunction();
f(); // logs 'world' -- haha


역할 영역 도 통과 - 폐쇄

//           
(function() {
 var baz = 1;
 var bim = function() { alert(baz); };
 bar = function() { alert(baz); };
})();

console.log(baz); //           baz

bar(); //    bar         var
  //    bar        ;   ,
  // bar   baz            ,
  //    bar      baz
  //    bar       

bim(); // bim              ,
  //         


좋은 웹페이지 즐겨찾기