2013-04-23 3 views
0

나는 책을 읽고 "함수에서 변수의 범위를 제한한다"라는 말은 함수 객체에서 클로저를 상속 한 다른 객체가 해당 속성에 액세스 할 수없는 경우 해당 속성에 액세스 할 수 없음을 의미합니다.자바 스크립트의 종료는 변수의 범위 만 제한합니까?

+0

클로저는 범위에 영향을 미치지 않으며 범위의 결과입니다. – RobG

+0

가능한 복제본 [JavaScript 클로저는 어떻게 작동합니까?] (http://stackoverflow.com/questions/111102/how-do-javascript-closures-work) –

+0

"함수에서 상속받는 것"은 무엇을 의미합니까? – Sebas

답변

1

클로저는 코드가 외부 실행 컨텍스트의 변수에 액세스 할 수있는 곳입니다. 유용한 클로저에서는 변수를 포함하는 함수가 실행을 마친 후에 변수가 계속 존재합니다.

var x = (function() { 
    var outerA = 'A'; 
    return function() { 
    return outerA; 
    } 
}()); 

내부 기능 outerA 즉 그 범위 체인에, outerA에 대한 액세스를 갖는다. 내부 기능이 너무 이후 여전히 outerA에 액세스 할 수 있으며, x에 할당 :

alert(x()); // A 

그래서 폐쇄가 범위를 제한하지 않습니다를, 그들은 그것의 결과입니다.

이 자바 스크립트 기능을 사용하여 클래스 기반 언어에서 비공개 멤버를 호출 할 수 있습니다. 또한 여러 객체가 동일한 값 집합 (객체, 함수, 프리미티브 등)에 액세스 할 수있는 상속에 사용될 수 있습니다.

0

Javascript에는 상속이 없습니다. 단순히 상속을 various means으로 시뮬레이션합니다.

JS의 클로저는 단순히 해당 범위의 변수 값을 보유하는 함수의 사실을 참조합니다. 그래서 예, 같은 물체에 대해서 이야기하고있는 한 값은 유지됩니다 & 범위.

+0

"자바 스크립트에는 상속이 없습니다"라는 말을 다시 생각해 볼 수 있습니다. 프로토 타입 상속을 사용합니다.이 상속은 클래식 클래스 기반 상속보다 훨씬 융통성이 있습니다. – RobG

+0

@RobG 프로토 타입의 복제/연결을 언급하는 경우 상속 된 객체로 덮어 쓰기 된 속성을 처리하는 데 도움이되지 않습니다. – loxxy

+0

나는 ECMAScript에서 구현 된 [prototype inheritance] (http://www.ecma-international.org/ecma-262/5.1/#sec-4.2.1)를 언급하고있다. "각 생성자는 프로토 타입 기반 상속과 공유 속성 "을 구현하는 데 사용되는"prototype "이라는 속성 분명히 자바 스크립트 (ECMAScript의 구현)에 상속이 있습니다. – RobG