cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Cetakan gelung untuk yang saya nyatakan dalam arahan let dalam pengenalan standard ES6 ialah 10. Bagaimana untuk menggantikannya tanpa let?

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.

阿神阿神2696 hari yang lalu870

membalas semua(4)saya akan balas

  • 扔个三星炸死你

    扔个三星炸死你2017-06-28 09:24:57

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

    Masalah penutupan

    balas
    0
  • 巴扎黑

    巴扎黑2017-06-28 09:24:57

    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

    balas
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-28 09:24:57

    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.

    balas
    0
  • 天蓬老师

    天蓬老师2017-06-28 09:24:57

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

    balas
    0
  • Batalbalas