javascript - Cetakan gelung untuk yang saya nyatakan dalam arahan let dalam pengenalan standard ES6 ialah 10. Bagaimana untuk menggantikannya tanpa let?
阿神
阿神 2017-06-28 09:22:57
0
4
864

Baru-baru ini saya sedang membaca Pengenalan Guru Ruan Yifeng kepada Standard ES, dan apabila saya membaca bab pertama, saya menyebut sekeping kod

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10

Menggunakan let here boleh menyelesaikan masalah ini, tetapi bagaimana jika kita menggunakan kaedah ES5? IIFE boleh melakukannya, tetapi ia mencetaknya serta-merta.

阿神
阿神

闭关修行中......

membalas semua(4)
扔个三星炸死你
var a = [];
            for(var i = 0; i < 10; i++) {
                +function(i){
                    a[i] = function() {
                        console.log(i);
                    }
                }(i);
            };
a[6](); // 6

Masalah penutupan

巴扎黑

Anda boleh menggunakan atribut tersuai
var a = [];
untuk (var i = 0; i < 10; i++) {

  var a[i].n = i;//自定义一个属性  n 
  a[i] = function () {
    console.log(this.n);
  };

}
a[6](); // 6

曾经蜡笔没有小新

Ini tiada kena mengena dengan apa-apa saya rasa penyoal nak keluarkan 6 kan? let

Tapi soalan yang awak tanya tu macam tak relevan langsung dengan apa yang awak nak saya nak tolong awak tukar huraian soalan tapi saya agak tak berdaya...

Ini sebenarnya masalah penutupan Terutamanya, mari kita analisis dahulu mengapa 10 adalah output:

var a = [];
for(var i = 0; i < 10; i++) {
    a[i] = function () {
        console.log(i);
    };
}
a[6](); // 10
Nilai

ialah 10, jadi 10 ialah output. for里面的i的作用于是整个外部区域,所以,当调用a[6]()的时候,其实运行的是console.log(i),而此时因为跑完循环,i

Mengenai apa yang dikatakan oleh penyoal,

boleh diselesaikan kerana pembolehubah yang diisytiharkan oleh let可以解决,是因为,for里面,let声明的变量,作用于只在for内部,所以,不会因为循环跑完而使得idalam for hanya berfungsi di dalam for, jadi ia tidak akan dijalankan kerana gelung i bersamaan dengan 10 dalam skop global.

Malah, perkara yang benar-benar diteliti soalan ini adalah penutup.

var a = [];
for(var i = 0; i < 10; i++) {
    (function() {
        [i] = function () {
            console.log(i);
        }
    })(i);
}
a[6]();

Peranan penutupan adalah serupa dengan peranan let sebelumnya, iaitu mengasingkan pembolehubah tempatan antara satu sama lain tanpa mencemarkan nilai pembolehubah luaran Setiap penutupan adalah kawasan bebas, dan parameter penutupan hanya menggunakan Ia digunakan di dalam penutupan, jadi hasil keluaran 6 juga boleh dicapai.

Peter_Zhu

Anda boleh menggunakan penutupan
http://www.softwhy.com/articl...
Separuh kedua artikel ini telah menjelaskan soalan anda

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!