Como os navegadores lidam com múltiplas declarações de funções com o mesmo nome?
-
14-12-2019 - |
Pergunta
Como os navegadores lidam com múltiplas declarações de funções com o mesmo nome?
O caso de teste específico está abaixo - NOTA:Eu sei que não faz sentido permitir que um script de servidor crie mais de uma declaração de função com o mesmo nome, mas estou curioso, então perceba isso antes de responder.Isso é puramente para pesquisa comportamental.
Nosso CMS cria múltiplas instâncias de um único "widget" que é composto por um
<div class="targetMeWithThis"></div>
e um
function startWidgetFunction() {
var param1 = $server.Variable1
var param2 = $server.Variable2
var param3 = $server.Variable3
}
Quando o servidor renderiza uma página que possui várias instâncias desse widget, como o navegador decide qual função javascript é usada?Existem navegadores que realmente criam objetos (funções) separados para cada um?
Obrigado; j
Solução
em javascript, (quase) tudo é um objeto, inclusive funções.Dito isto, substituir uma definição de função funciona exatamente da mesma forma que substituir uma variável.
var myFunc = function () {
alert('1');
};
myFunc(); // alerts '1'
var myFunc = function () {
alert('2');
};
myFunc(); // alerts '2'
Observe que declarar uma variável que já está declarada não é uma boa prática e muitas ferramentas de qualidade de código (jslint, jshint, etc) irão avisá-lo sobre isso.
Outras dicas
Neste caso específico:
function = startWidgetFunction() {
var param1 = $server.Variable1
var param2 = $server.Variable2
var param3 = $server.Variable3
}
O navegador gerará um erro porque function
é uma palavra-chave reservada.
Dado um nome de variável diferente, você está apenas atribuindo um valor a uma variável (global).A variável será substituída por uma nova função (idêntica) a cada execução sucessiva do script do widget.