Rumah  >  Artikel  >  hujung hadapan web  >  Pengenalan kepada penutupan dalam petua JavaScript_javascript

Pengenalan kepada penutupan dalam petua JavaScript_javascript

WBOY
WBOYasal
2016-05-16 16:09:151229semak imbas

Penutupan yang dipanggil harus merujuk kepada: fungsi dalaman membaca pembolehubah di luar fungsi semasa, iaitu konteks di mana ia dicipta.

Salin kod Kod adalah seperti berikut:

fungsi hello(){
var char = "hello,world";
Cetak fungsi(){
console.log(char);
};
Kembalikan cetakan();
}

Perlu diingatkan bahawa fungsi cetakan di sini merujuk kepada pembolehubah char bagi fungsi hello luaran, jadi di sini kita boleh mengembalikan
Salin kod Kod adalah seperti berikut:

hello, dunia

Dari satu segi, fungsi ini harus dikaitkan dengan skop. Sudah tentu, kami tidak mempunyai cara untuk mengakses char secara langsung, melainkan terdapat ralat apabila kami mengisytiharkan pembolehubah ini. Seperti
Salin kod Kod adalah seperti berikut:

fungsi hello(){
char = "hello, dunia";
Cetak fungsi(){
console.log(char);
};
Kembalikan cetakan();
}

Hanya kerana terdapat var yang hilang.

Salin kod Kod adalah seperti berikut:

Di sini hello menjadi penutup. Penutupan adalah sejenis objek istimewa. Ia terdiri daripada dua bahagian: fungsi, dan persekitaran di mana fungsi itu dicipta. Persekitaran terdiri daripada sebarang pembolehubah tempatan yang berada dalam skop semasa penutupan dibuat.

Penutupan JavaScript dan ini

Perlu diingatkan bahawa mungkin terdapat masalah semasa membaca ini dan hujah.

Salin kod Kod adalah seperti berikut:

fungsi hello(){
This.char = "hello,world";
Output fungsi(){
         char = "Saya bukan hello world";        
         console.log(this.char);
};
Kembalikan output();
}

Sudah tentu, contoh ini tidak cukup sesuai, jadi kami memerlukan contoh tambahan untuk menjelaskan masalah ini. Berikut adalah contoh dari "Pengaturcaraan Lanjutan Javascript" untuk menggambarkan masalah ini.
Salin kod Kod adalah seperti berikut:

var name = "Tetingkap";

objek var = {
nama: "Objek Saya",

getNameFunc: function(){
         mengembalikan fungsi(){
              kembalikan this.name;
}
}
};
object.getNameFunc()()


Cuma penggunaan ini adalah nyata dan penyelesaiannya adalah untuk menyimpan pembolehubah sementara yang, seperti yang dinyatakan dalam artikel "Sesetengah pengetahuan tentang ini dalam Javascript".

Salin kod Kod adalah seperti berikut:

var name = "Tetingkap";
objek var = {
nama: "Objek Saya",

getNameFunc: function(){
        var that = this;
         mengembalikan fungsi(){
              kembalikan nama itu;
}
}
};
object.getNameFunc()()


Javscript 클로저와 변수 읽기 및 쓰기
변수를 잘 처리하지 않으면 이러한 변수를 수정할 수도 있다는 점은 주목할 가치가 있습니다.
코드 복사 코드는 다음과 같습니다.

함수 hello(){
var char = "hello,world";
복귀{
​​​​ 세트: 함수(문자열){
               반환 문자 = 문자열;
},
                             인쇄: function(){
console.log(문자)
}
}
}
var say = hello();
say.set('new hello,world')
say.print() // 새로운 Hello World

자바스크립트 클로저 및 성능

MDC 인용

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

일부 특정 작업에 클로저가 필요하지 않은 경우 클로저는 처리 속도 및 메모리 소비를 포함하여 스크립트 성능에 부정적인 영향을 미치기 때문에 불필요하게 다른 함수 내에 함수를 만드는 것은 현명하지 않습니다.

기사에서도 언급됐다.
코드 복사 코드는 다음과 같습니다.

예를 들어, 새 개체나 클래스를 만들 때 메서드는 일반적으로 개체의 생성자에서 정의되기보다는 개체의 프로토타입과 연결되어야 합니다. 그 이유는 생성자가 호출될 때마다(즉, 모든 객체 생성에 대해) 메서드가 다시 할당되기 때문입니다.
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn