function helloTranslator(String helloWord)
{
return function(String name)
{
return "#helloWord#, #name#";
};
}
Ở đây helloWord
và name
không thể bị nhiễu. Có một phạm vi ngụ ý Owner
với "đóng cửa được xác định trong một hàm" là phạm vi cục bộ của hàm khai báo (cha mẹ), nơi các biến này có mặt. Vì vậy, các biến này phải là duy nhất (trong hàm) để được truy cập từ các bao đóng.
Trong đóng cửa, tìm kiếm một biến unscoped đi qua: phạm vi địa phương
- Đóng cửa của
- luận Đóng cửa của phạm vi
phạm vi địa phương
- Outer/Chủ đầu chức năng nếu có sẵn
phạm vi tranh luận
- Outer/Chủ đầu chức năng của nếu có sẵn
- Phạm vi biến (có sẵn tại thời điểm tạo vật đóng)
- ColdFu phạm vi tích hợp sion
Nếu có gì đó bị cắt như Local
, khi đóng, nó sẽ chỉ tìm kiếm trong 1. AFN không có cách nào để trực tiếp phạm vi cho 3,4.
p.s. như đã nói trước đó phạm vi Owner
là gì, nhưng một phạm vi tiềm ẩn trỏ đến một bản sao được lưu trữ của phạm vi địa phương của cha mẹ/bên ngoài của chức năng tại thời điểm tạo ra đóng cửa.
p.s. Bạn có thể log an enhancement with ColdFusion để làm cho phạm vi này rõ ràng.
Ví dụ về các phạm vi khác nhau như sau. Chạy điều này và bạn sẽ hiểu cách đóng cửa sẽ sử dụng phạm vi 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));
Nguồn
2012-05-16 11:02:04
Bạn có thể vui lòng cung cấp một ví dụ mã hoàn chỉnh hơn, sau đó chọn nhãn mà var thuộc mà phạm vi? và với những gì var có sẵn tại thời điểm tạo ra đóng cửa? Có thể một bài đăng trên blog về chủ đề này? Nó trở nên khó hiểu. Cảm ơn bạn. – Henry
ER đã được gửi: https://bugbase.adobe.com/index.cfm?event=bug&id=3191742 – Henry
@ Ví dụ không phù hợp trong nhận xét vì vậy tôi đang đặt câu trả lời riêng cho điều đó –