Javascript 关于对象/调用函数的问题

Javascript 关于对象/调用函数的问题,javascript,function,object,invocation,Javascript,Function,Object,Invocation,所以我通过ProjectEuler解决了这个问题,现在我需要使用对象来解决这个问题,我一直在搜索google,但希望能得到一些关于我可能出错的建议。在试图存储变量以供以后使用时,主要的fiboSeq似乎永远都不可用。我只是调用了错误的函数吗?任何关于正确方向的建议或观点都会很好 function solution(){ return { fibo: function(limit, prev, curr){ var fiboSeq = []; for (curr

所以我通过ProjectEuler解决了这个问题,现在我需要使用对象来解决这个问题,我一直在搜索google,但希望能得到一些关于我可能出错的建议。在试图存储变量以供以后使用时,主要的fiboSeq似乎永远都不可用。我只是调用了错误的函数吗?任何关于正确方向的建议或观点都会很好

function solution(){
  return {
    fibo: function(limit, prev, curr){
      var fiboSeq = [];
      for (curr = curr; curr < limit; curr = prev + curr){
        prev = curr - prev;
        fiboSeq.push(curr);
      }
      return fiboSeq;
    },

    filterEvens: function(index){
      var evens = [];
      fiboSeq.forEach(function(value, index){
        if (value % 2 === 0){
          evens.push(value);
        }
      });
      return evens;
    },

    sum: function(evens){
      sumEvens = 0;
      evens.forEach(function(value, index){
        sumEvens += sumEvens
      });
      return sumEvens;
    }
  }
}

var seqF = solution().fibo(100, 1, 2);
var evenF =  solution().filterEvens(seqF);
var victoryD = solution().sum(evenF);
console.log(victoryD);
谢谢

fiboSeq位于fibo的本地socpe中。要从其他函数访问它,您应该将其作为参数传递,或者在返回的对象外部定义它

function solution(){
  var fiboSeq = [];
  return {
    fibo: function(limit, prev, curr){
      for (curr = curr; curr < limit; curr = prev + curr){
        prev = curr - prev;
        fiboSeq.push(curr);
      }
      return fiboSeq;
    },
    // ...
  }  

查看以下代码:

function solution(){
  this.fiboSeq = this.evens = [];
  this.fibo = function(limit, prev, curr){
    for(var c=curr,l=limit,p=prev; c<l; c=p+c){
      p = c-p; this.fiboSeq.push(c);
    }
    return this;
  }
  this.filterEvens = function(){
    var fs = this.fiboSeq;
    for(var i=0,l=fs.length; i<l; i++){
      if(fs[i] % 2 === 0){
        this.evens.push(fs[i]);
      }
    }
    return this.evens;
  }
}
var sol = new solution;
var evenF = sol.fibo(100, 1, 2).filterEvens(); 
var eFl = evenF.length;

不,我认为这应该是基于实例的。谢谢我把它移到了外面,在测试中又前进了一步,我想下一个障碍是我只需要把其他数组的变量声明也移到外面。这门课上了三个星期,似乎总是有一些很小的事情把它弄得一团糟!谢谢你展示了另一种攻击方式。当我在谷歌和这里挖掘的时候,我遇到过很多次,但在课堂上还没有出现过。这个例子将帮助我了解它是如何工作的!在本例中,这只是指当前实例。