function helloTranslator(String helloWord)
{
return function(String name)
{
return "#helloWord#, #name#";
};
}
여기 helloWord
및 name
는 범위가 될 수 없다. Owner
범위에는 "함수 내에 정의 된 클로저"가 있는데이 변수가있는 곳 (부모) 함수의 로컬 범위입니다. 따라서 이러한 변수는 클로저에서 액세스 할 수 있도록 고유해야합니다 (함수 내에서).
폐쇄에
, 범위가 지정되지 않은 변수에 대한 검색을 통해 진행됩니다
- 폐쇄의 지역 범위
- 폐쇄의 인수 범위
- 외부/소유자 함수의 로컬 범위 가능한 경우
- 외부/소유자 함수의 인수 범위 가능한 경우
- 변수 범위 (마감일 현재 사용 가능)
- ColdFu sion 내장 범위
무언가가 Local
으로 범위가 지정되어 있으면 폐쇄에서 1로만 검색합니다. AFN에는 3,4에 대해 직접 범위를 지정할 수있는 방법이 없습니다.
p.s. 앞에서 말한 것처럼 Owner
범위는 클로저가 생성 될 때 부모/외부 함수의 로컬 범위의 캐시 된 복사본을 가리키는 암시 적 범위 일뿐입니다.
p.s. 이 범위를 명시 적으로 만들려면 log an enhancement with ColdFusion 수 있습니다.
다른 범위의 예는 다음과 같습니다. 이것을 실행하면 closure가 differnt 범위를 사용하는 방법을 이해해야합니다.
any function exampleClosureForm(arg1){
function x(innerArg1,innerArg2){
//var arg1= 50;// will hide parent's arg1 if declared
writedump(arguments);// would dump closure's
writedump(local);// would dump closure's
writedump(session.a); // would be same session shared across
writedump(arg1); // would dump parents argument arg1
return session.a-- + innerArg1+innerArg2+arg1--;// decrementing to see its behavior for successive call
};
writeoutput(x(1,2));
writedump(arguments,"browser","html",false,"function");// would dump parent's
writedump(local,"browser","html",false,"function");// would dump parent's
arg1 = -100; // since closure is sharing the parent's variable, this change should get reflected
return x;
}
session.a = 10;
a = exampleClosureForm(10);
writeoutput("now the calls <br>");
writeoutput(a(innerArg1=5,innerArg2=5));
writeoutput("<br>");
// with argumentcollection
argsColl = structNew();
argsColl.innerArg1= 1;
argsColl.innerArg2= 3;
writeoutput(a(argumentCollection = argsColl));
당신이 더 완전한 코드 예제를 제공 주실 래요, 다음 레이블이있는 VAR는 범위에 속하는? 클로저가 생성 될 때 사용할 수있는 var는 무엇입니까? 이 주제에 관한 블로그 게시물일까요? 혼란스러워지고 있습니다. 고맙습니다. – Henry
응급실 응급실 : https://bugbase.adobe.com/index.cfm?event=bug&id=3191742 – Henry
@Henry 예는 의견에 맞지 않을 것입니다. 그래서 나는 그것에 대한 별도의 대답을하고 있습니다. –