segunda-feira, 18 de fevereiro de 2013

Chamdas de funções nos browsers

Esse tópico é algo muito curioso e particular do IE6. Em javascript é possível tem uma função recebendo x parâmetros, onde x é um número maior que 0 e é possível chamá-la não passando todos os parâmetros, segue exemplo:

function foo(param1, param2, param3){
/*código*/
}

function foo2(){
      foo("a", "b");

}

Note que só passei dois paramêtros na chamada de foo em foo2, quando todo esse código for executado o que virá como valor no param3?

É aí que entra a grande questão. Nos browsers ie7( e versões superiores), firefox, chrome, opera e safari o parâmetro que falta vai com o valor de "undefined" para a função foo(), porém no ie6 ele usa o último valor da pilha de chamada de função.

COMO ASSIM ?

O ie6 usa o último valor de parâmetro passado quando ele nota que numa função que recebe x parâmetros são passados menos que x. Um exemplo deve esclarecer as coisas.

Vamos continuar utilizando a função foo() definida lá em cima.

function foo3(){
    foo('a', 'b', 'c');
   /*codigo*/
   foo('a', 'b');
}

Na segunda chamada de foo, o valor de param3 virá como 'c' mesmo eu não tendo passado nada para ele na segunda chamada, logo ele utiliza o último valor da pilha de chamadas de funções. Isso pode causar problemas em seus scripts quando você quer construir um sistema que rode em todos os browsers. Uma das soluções para esse problema é sempre passar todos os parâmetros ou forçar a passada de "undefined" para a função.

Nenhum comentário: