Ajuda pra entender um codigo javascript (funcao every)

4 respostas
faeldix

vi esse codigo no video: http://www.youtube.com/watch?v=Mauiqv-jC-U

porem nao entendi como a funcao que ele criou funciona.. pra que vc nao precise ver toda o video eu vou copiar aqui:

var frutas = ['abaxaxi','melao','bacuri'];

function todos(elem,ind,obj){
             return (typeof elem == 'string');
}

alert(frutas.every(todos));

4 Respostas

faeldix
faeldix:
vi esse codigo no video: http://www.youtube.com/watch?v=Mauiqv-jC-U

porem nao entendi como a funcao que ele criou funciona.. pra que vc nao precise ver toda o video eu vou copiar aqui:

var frutas = ['abaxaxi','melao','bacuri'];

function todos(elem,ind,obj){
             return (typeof elem == 'string');
}

alert(frutas.every(todos));

Primeiro:

Ele utilizou a funcao todos() sem usar o '()' segundo sao necessario 3 parametros.. ME PARECE que ele so usa um.. como funciona essa funcao every()?

A
faeldix:
faeldix:
vi esse codigo no video: http://www.youtube.com/watch?v=Mauiqv-jC-U

porem nao entendi como a funcao que ele criou funciona.. pra que vc nao precise ver toda o video eu vou copiar aqui:

var frutas = ['abaxaxi','melao','bacuri'];

function todos(elem,ind,obj){
             return (typeof elem == 'string');
}

alert(frutas.every(todos));

Primeiro:

Ele utilizou a funcao todos() sem usar o '()' segundo sao necessario 3 parametros.. ME PARECE que ele so usa um.. como funciona essa funcao every()?

Vamos lá, em javascript você pode usar funções como parâmetro de outras funções.
Na verdade, funções podem ser tratados como outros objetos.
Por isso pode fazer coisas assim:

function umaFuncaoNormal() {  
  alert('teste');
}

var f = umaFuncaoNormal; //associo a f a função umaFuncaoNormal

f(); // aqui é equivalente a chamar umaFuncaoNormal

function recebendoFuncaoComoParametro( algumaFuncao ) {  //essa funcao recebe outra funcao como parametro ...
  algumaFuncao(); algumaFuncao();  // ... e aqui ela executa a função que recebeu 2x;
}

recebendoFuncaoComoParametro( f ); // aqui ela vai chamar aquele alert 2x

Voltando ao seu código, quando ele usa todos sem (), ele não está executando a função, apenas passando como parâmetro.

A função every é aplicada sobre um array.

Para cada elemento do array, ela usará a função que passou como parâmetro (todos).
Se para todos elementos, essa função retornar true, a função every retorna true.
Se para algum elemento retornar false, ela nem processa o resto do array e retorna false.

Em resumo, você pode ler seu código como: Se todos elementos do array for do tipo string, every retornará true.

faeldix

e os parametros

function todos(elem,ind,obj){ return (typeof elem == 'string'); }

elem deu pra entender que é o array[x]
mas COMO ele sabe que elem é isso? sendo que nao foi passado parametro algum… e pra que serve o ind e obj como eu iria utiliza-los??

A

Olha só, dá uma olhada numa possível implementação do método every, e veja como ele processa o array:

function every(fun /*, thisp*/)
      {
        var len = this.length;
        if (typeof fun != "function")
          throw new TypeError();

        var thisp = arguments[1];
        for (var i = 0; i < len; i++)
        {
          if (i in this &&
              !fun.call(thisp, this[i], i, this))
            return false;
        }

        return true;
      }

Para entender como funciona coloca uns alerts dentro da sua função todos e aí vai perceber o que representa cada coisa.

Criado 27 de dezembro de 2011
Ultima resposta 28 de dez. de 2011
Respostas 4
Participantes 2