>웹 프론트엔드 >JS 튜토리얼 >JavaScript_javascript 팁의 클로저 소개

JavaScript_javascript 팁의 클로저 소개

WBOY
WBOY원래의
2016-05-16 16:09:151308검색

이른바 클로저는 다음을 참조해야 합니다. 내부 함수는 현재 함수 외부의 변수, 즉 함수가 생성된 컨텍스트를 읽습니다.

코드 복사 코드는 다음과 같습니다.

함수 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.
Code kopieren Der Code lautet wie folgt:

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

Code kopieren Der Code lautet wie folgt:

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.
Code kopieren Der Code lautet wie folgt:

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.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.