Rumah  >  Soal Jawab  >  teks badan

Isu penutupan JavaScript

**为什么在查找到i的时候i变成了3;**

function outer(){
            for (var i = 0,arr=[];i<3;i++){
                arr[i] = function(){
                    return i;
                }                            
            }
            return arr;
        }
        var getNum = outer();
        console.log(getNum[0](),getNum[1](),getNum[2]());
滿天的星座滿天的星座2711 hari yang lalu453

membalas semua(4)saya akan balas

  • 怪我咯

    怪我咯2017-05-19 10:35:04

    Oleh kerana fungsi tanpa nama anda(){return i;} tidak dilaksanakan, i di sini tidak ditentukan, dan kemudian return arr, ini ialah function(){return i;} yang disimpan dalam tatasusunan ]() ialah apabila di atas untuk (var i = 0,arr=[];i<3;i++){} dilaksanakan, i=3; jadi getNum[0](),getNum[1](), The output getNum[2]() ialah 3.

    balas
    0
  • PHP中文网

    PHP中文网2017-05-19 10:35:04

    Itulah sekarang Masalah penutupan diselesaikan dengan cara yang sama

    .
    function outer(){
                for (var i = 0,arr=[];i<3;i++){
                    arr[i] = (function(index){
                        return function() {
                            console.log(index)
                        };
                    })(i)                   
                }
                return arr;
            }
            var getNum = outer();
            console.log(getNum[0](),getNum[1](),getNum[2]());

    balas
    0
  • 高洛峰

    高洛峰2017-05-19 10:35:04

    Oleh kerana i ialah pembolehubah persisian, ia hanya ditemui semasa membuat panggilan.
    Dan apabila anda memanggilnya, gelung telah tamat dan nilai i sudah 3, jadi anda hanya boleh mendapat 3

    balas
    0
  • PHP中文网

    PHP中文网2017-05-19 10:35:04

    function outer(){
        for (let i = 0,arr=[];i<3;i++){
            arr[i] = function(){
                return i;
            }                            
        }
        return arr;
    }
    var getNum = outer();
    console.log(getNum[0](),getNum[1](),getNum[2]());
    

    Masalah menentukan domain

    var ditukar kepada let

    balas
    0
  • Batalbalas