亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JavaScript中關于給函數閉包傳參的問題?。。?!

JavaScript中關于給函數閉包傳參的問題?。。?!

江戶川亂折騰 2018-08-26 12:37:57
此函數dim意圖是建立一個特定長度的數組(d),從特定的數位(n)開始依次按1增加。問題1:為什么返回的數組第一位始終是一開始傳入的參數?不是應該++嗎問題2:我對閉包的概念不是很懂,麻煩解釋一下為什么在6, 7行的函數中加n參數會發生異常(我認為應該把參數導入進下面的參數才對)比如如果我在第六行的函數中傳入n的話他就不會按照我所指定的數位開始增加,而是從0開始附返回值:(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]函數本體:Array.dim = function(d, n){    var i,         a = []        //n = n + 1;     for (i = 0; i < d; i++){         a[i] = (function (){  //麻煩解釋一下這行的函數中為什么寫入n參數會發生異常             return function(){  //麻煩解釋一下這行的函數中為什么寫入n參數會發生異常                 return n++             }()         })(i)     }    return a }var arr = Array.dim(10,2);console.log(arr)  //返回(10) [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
查看完整描述

1 回答

?
米脂

TA貢獻1836條經驗 獲得超3個贊


問題2:在第六行的函數中傳入n,相當于給這個函數定義了一個形參n,當 Array.dim(10,2)時,剛開始時i=0,在外面傳入參數i,相當于給這個函數的形參n傳入值0,所以是從返回(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

for (i = 0; i < d; i++){
    a[i] = (function (n){ //麻煩解釋一下這行的函數中為什么寫入n參數會發生異常
            console.log(n) //0
                return function(){  
                return n++
                }()
              })(i)//相當于剛開始時給這個函數的形參n傳入值0}

在第七行的函數中傳入n,相當于定義了一個形參n,所以值是undefined,undefined++后是NaN

for (i = 0; i < d; i++){
    a[i] = (function (){ 
                return function(n){  //麻煩解釋一下這行的函數中為什么寫入n參數會發生異常
                console.log(n) //undefined
                return n++
                }()
              })()
}

這題不用把參數n和i導入也行,函數運行后,發現沒有變量n和i就會沿著作用域自動往上找,得到i=0,n=2
Array.dim = function(d, n){

var i,
    a = []    // n = n + 1;for (i = 0; i < d; i++){
    a[i] = (function (){ 
                return function(){ 
                return ++n
                }()
              })()
}return a

}

var arr = Array.dim(10,2);
console.log(arr) //返回(10) [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]


查看完整回答
反對 回復 2018-08-27
  • 1 回答
  • 0 關注
  • 706 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號