Ajuda pra entender um codigo javascript (funcao every)

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:

[code]var frutas = [‘abaxaxi’,‘melao’,‘bacuri’];

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

alert(frutas.every(todos)); [/code]

[quote=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:

[code]var frutas = [‘abaxaxi’,‘melao’,‘bacuri’];

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

alert(frutas.every(todos)); [/code][/quote]

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()?

[quote=faeldix][quote=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:

[code]var frutas = [‘abaxaxi’,‘melao’,‘bacuri’];

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

alert(frutas.every(todos)); [/code][/quote]

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()?[/quote]

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.

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??

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.