0

嗨,我一直在探索闭包和 javascript 核心概念,我不明白为什么 console.log(factory[i]) 输出未定义我已经将我的函数推到了那里,对吗?如果我在循环外调用 temp 它说未定义,而如果我在循环内调用它返回有点困惑谁能解释我?这是我的代码

var fruits=["apple","orange"];
var factory=[];
for(var i=0;i<fruits.length;i++)
{
   var temp=function()
   {
      console.log(fruits[i]);
   }
  factory.push(temp());
}
temp();
console.log(factory);
for(var i=0;i<factory.length;i++)
{
   temp(i);
   console.log(factory[i]);
}

https://jsfiddle.net/kh3okLca/

4

3 回答 3

1
  1. 您不是传递函数,而是传递函数 temp() 的结果,因为它不返回任何未定义的内容。change factory.push(temp()); to factory.push(temp);

  2. 外部的 temp() 返回未定义,因为到那时循环已经执行,并且 i 的值正在2检查以下这段代码,该代码记录了 i 的值。

var fruits=["apple","orange"];
var factory=[];
for(var i=0;i<fruits.length;i++)
{
	var temp=function()
  {
  	console.log(fruits[i],"console",i);
  }
  factory.push(temp);
}
temp();
console.log(factory,"factory");
for(var i=0;i<factory.length;i++)
{
 	temp(i); //i resets to 0 here in same scope
    console.log(factory[i](i),"factoryi"); //this doesnt return anything so its undefined but statements are executed
}

于 2017-04-17T08:05:39.087 回答
0

这是您的输出。

    //next two executed due to factory.push(temp()) in first if loop 
    & there is a console.log there inside the function
    apple   
    orange
    //here i++ in first loop will be 3, but array have only two element, so it is undefined
    undefined
    // due to console.log(factory)
     // temp function is actually returning undefined,
    [undefined, undefined]
    // due to temp(i) in second if block
    apple
    // but factory array is stil empty so factory[i] will be undefined
    undefined
    from temp  orange
    undefined
于 2017-04-17T08:05:29.173 回答
0

闭包只不过是保留数据的功能。到目前为止,一个函数被视为代码的和平,它接受输入并产生一些输出,对于每个函数调用,此代码保持不变,但闭包让您有机会使用可以更改的函数保存一些数据,以便每个函数调用它会有不同的反应,请记住,一切都会很容易。

假设你有一个查找利率的函数,但是这个函数被三个利率不同的团队使用,所以通常我们所做的我们将团队名称与本金金额一起传递,每次我们必须传递团队name ,所以通过使用闭包我们可以为每个团队创建三个函数实例(团队名称作为保存数据),现在只发送本金金额并获得根据团队计算的利息,我稍后再添加示例,

于 2017-04-17T09:12:40.330 回答