skop penutupan js
扔个三星炸死你
扔个三星炸死你 2017-06-28 09:28:39
0
8
764

Mengapa ia dikeluarkan 10 kali bukankah 10 yang ditolak masuk menjadi 1 - 9 Tolong beri saya jawapan kepada perangkap ini

function save_i(){
    var a = [];
    for(var i = 0;i<10;i++){
        a[i] = function(){
            return i;
        }
    }
    return a;   
}

var c = save_i();
for(var i = 0;i<10;i++){
   console.log(c[i]());
    //10次 10
}
扔个三星炸死你
扔个三星炸死你

membalas semua(8)
黄舟

Anda hanya perlu mencipta fungsi penutupan untuk menyimpan nilai i apabila gelung for dilaksanakan, dan ia boleh dikeluarkan mengikut urutan

function save_i(){
    var a = [];
    for(var i = 0;i<10;i++){
        a[i] = function(i){
            return function() {
                return i;
            };
        }(i);
    }
    return a;
}

var c = save_i();
for(var i = 0;i<10;i++){
   console.log(c[i]());
    //已经变为依次输出
}
阿神
在执行点击事件之前,for循环已经执行完,也就是最终获取的是最后 i 的值5。  
呆神:绑定 和 点击 是两个事件  点击是用户交互的时候发生  绑定在引擎编译代码的时候就发生了~             
宇神:这样理解吧,你把点击事件当做一个下车事件,而火车从1-4,到4时你才能下车执行事件,此时值为4.

Artikel yang saya baca pada masa lalu
Memahami penutupan memerlukan anda menulis kod dan kemudian boleh menggunakannya dalam kod anda sendiri Selain daripada itu, anda hanya boleh menghafalnya dengan menghafal.
Cina sekolah lama suka membiarkan anak-anak mereka membawa barang-barang semasa mereka masih kecil, tetapi mereka tidak tahu maksudnya dan kadang-kadang mereka tidak dapat menerangkannya dengan jelas. Mereka berharap mereka akan memahaminya secara semula jadi pada satu ketika masa depan
Di atas
Jika anda mempunyai pengetahuan asas tertentu Adalah disyorkan untuk membaca log yang saya tulis Jika anda masih tidak faham, tinggalkan mesej dan bertanya kepada saya .com/2084...

女神的闺蜜爱上我
function save_i(){
    var a = [];
    for(var i = 0;i<10;i++){
        a[i] = function(i){
            return i;
        };
    }
    return a;   
}

var c = save_i();
for(var i = 0;i<10;i++){
   console.log(c[i](i));
}
黄舟
 a[i] = function(i){
            return i;
        };

Setiap i sebagai balasan merujuk kepada i luaran yang sama, iaitu 10

黄舟
var fns=[];
function test(){
    for(var i=0;i<10;i++){
        (function(j){
            fns.push(
                function(){
                    console.log(j);
                }
            );
    })(i);    
    
    }

}

test();

for(var k=0;k<fns.length;k++){
    fns[k]();
}

Skop pembolehubah var ialah skop fungsi, bukan skop peringkat blok

Peter_Zhu

Rantai skop telah dijana apabila ia dicipta c[i] = function(i){ return i; };Apabila berjalan, skop semasa tidak mempunyai i, dan i skop atas save_i() telah menjadi 10. Adakah anda fikir hasilnya ialah 0~9 Adakah anda fikir skop atas ialah skop global?

黄舟

a[i] ialah sekumpulan fungsi apabila ditugaskan, iaitu, ia tidak dilaksanakan, ia juga tidak mendapat i, dan skopnya juga tidak mendapat i

Apabila anda melaksanakannya di bawah, sekumpulan fungsi ini mula mencari i yang boleh diperolehi dalam skop mereka sendiri, iaitu 10 selepas gelung dilaksanakan

巴扎黑

Kata kunci

var mengisytiharkan skop pembolehubah sebagai skop fungsi, jadi pembolehubah i dalam gelung for akan dinaikkan pangkat. Ia akan menjadi ok jika poster menukar bahagian dalam gelung for kepada fungsi laksana sendiri. cth:
fungsi save_i(){

var a = [],
    i = 0;
for(;i<10;i++){
    a[i] = function(i){
        return i;
    }(i);
}
return a;

}

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan