为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 688 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信