이른바 클로저는 다음을 참조해야 합니다. 내부 함수는 현재 함수 외부의 변수, 즉 함수가 생성된 컨텍스트를 읽습니다.
함수 hello(){
var char = "hello,world";
함수 인쇄(){
console.log(char);
};
print() 반환;
}
여기서 인쇄 함수는 외부 hello 함수의 char 변수를 참조하므로 여기서
를 반환할 수 있습니다.
안녕하세요, 세상
어떤 의미에서 이 기능은 범위에 속해야 합니다. 물론 이 변수를 선언할 때 오류가 발생하지 않는 한 char에 직접 액세스할 수 있는 방법은 없습니다.
등
함수 hello(){
char = "안녕하세요, 세계";
함수 인쇄(){
console.log(char);
};
print() 반환;
}
var가 누락되었기 때문입니다.
여기서 hello는 폐쇄가 됩니다. 클로저는 특별한 종류의 객체입니다. 이는 함수와 함수가 생성되는 환경이라는 두 부분으로 구성됩니다. 환경은 클로저가 생성될 때 범위에 있었던 모든 지역 변수로 구성됩니다.
Javscript 클로저와 이것
이 글과 주장을 읽으면서 문제가 있을 수 있다는 점에 유의해야 합니다.
함수 hello(){
This.char = "hello,world";
함수 출력(){
char = "I'm no hello world";
console.log(this.char);
};
출력() 반환;
}
물론 이 예제는 적절하지 않으므로 이 문제를 설명하려면 추가 예제가 필요합니다. 다음은 이 문제를 설명하기 위한 "Javascript Advanced 프로그래밍"의 예제입니다.
var name = "창";
var 객체 = {
이름: "내 개체",
getNameFunc: 함수(){
반환 함수(){
this.name을 반환합니다.
}
}
};
object.getNameFunc()()
이 사용법은 실제이며 해결책은 "
Javascript에서 이에 대한 지식" 기사에서 언급한 대로 임시 변수를 저장하는 것입니다.
var name = "창";
var 객체 = {
이름: "내 개체",
getNameFunc: 함수(){
var that = this;
반환 함수(){
that.name을 반환합니다.
}
}
};
object.getNameFunc()()
Javascript-Abschlüsse und Lesen und Schreiben von Variablen
Es ist erwähnenswert, dass wir diese Variablen auch ändern können, wenn wir mit unseren Variablen nicht gut umgehen.
Funktion hello(){
var char = "hello,world";
Zurück{
set: function(string){
return char = string;
},
print: function(){
console.log(char)
}
}
}
var say = hello();
say.set('new hello,world')
say.print() // neue Hallo Welt
Javascript-Abschlüsse und -Leistung
Zitat von MDC
Wenn für eine bestimmte Aufgabe keine Abschlüsse erforderlich sind, ist es unklug, unnötigerweise Funktionen innerhalb anderer Funktionen zu erstellen, da Abschlüsse negative Auswirkungen auf die Skriptleistung haben, einschließlich der Verarbeitungsgeschwindigkeit und des Speicherverbrauchs.
Der Artikel erwähnt auch.
Wenn Sie beispielsweise ein neues Objekt oder eine neue Klasse erstellen, sollten Methoden normalerweise dem Prototyp des Objekts zugeordnet werden und nicht im Konstruktor des Objekts definiert werden. Der Grund dafür ist, dass die Methode bei jedem Aufruf des Konstruktors (d. h. bei jeder Objekterstellung) neu zugewiesen wird.