폐쇄와 관련된 문제가있어 의심을 표시하고 싶습니다. 나는 원래 정의 된 바깥에있는 스코프에 함수 접근을 시도하려고한다. 예를 들어 다음과 같은 코드 블록이 예상대로 작동합니다.JavaScript 동적 마감 범위
(function(){
function Outer() {
var test = "closure access";
return function Inner() {
alert(test);
};
};
// call outer then inner
Outer()();
}());
"클로저 액세스"문자열이 실행될 때 경고됩니다.
그러나 내부 함수가 "외부"범위 외부에서 정의 된 다음 "외부"함수에서 반환 된 경우 더 이상 로컬 "test"변수에 액세스 할 수 없습니다. 예를 들어 : 그것은 그 위에 정의 된 "내부"기능을 찾을 정상 범위의 이상으로
는(function(){
function Inner() {
alert(test);
};
function Outer() {
var test = "closure access";
return Inner;
};
// call outer then inner
Outer()();
}());
이 문제는 실제로보고있는 "외부"기능으로 나에게 의미가, 그리고 내부 함수는 범위 내에서 정의되지 않은 "외부"의 로컬 var "테스트"중 하나입니다. 내 질문은 어딘가에 (다른 곳에서) 함수를 정의하는 방법이 있지만 그 함수의 변수를 여전히 보존하면서 다른 함수에서 동적으로 반환하는 방법이 있습니까?
내가 더 잘 설명해야하는지 알려주세요.
==== 편집 ====은
확인하므로 함수를 정의하는 범위를 생성 및 기능을 사용하지. 다음 코드 스 니펫은 함수를 정의하지 않습니까?
(function(){
function Outer() {
var test = "closure access";
return new Function("alert(test);");
};
// call outer then inner
Outer()();
}());
새로운 함수가 테스트 변수에 대한 액세스 권한이없는 메모리의 해당 지점에서 함수를 정의하는 경우?
아니요, 함수 범위는 함수를 사용하지 않고 함수를 정의하여 만듭니다. – dandavis
그것은 본질적으로 우리에게 사유 재산과 방법을 제공합니다. 아아, 우리는 모든 것을 생성자에 넣으려고 결심해야합니다. – MaxArt