Как браузеры обрабатывают несколько объявлений функций с одним и тем же именем?

Как браузеры обрабатывают несколько объявлений функций с одним и тем же именем?

Ниже приведен конкретный тестовый пример. ПРИМЕЧАНИЕ. Я знаю, что нет смысла позволять серверному сценарию создавать более одного объявления функции с одним и тем же именем, но мне любопытно, поэтому, пожалуйста, поймите это, прежде чем отвечать. Это чисто для поведенческих исследований.

Наша CMS создает несколько экземпляров одного "виджета", который состоит из

<div class="targetMeWithThis"></div>

и

function startWidgetFunction() {
var param1 = $server.Variable1
var param2 = $server.Variable2
var param3 = $server.Variable3
}

Когда сервер отображает страницу с несколькими экземплярами этого виджета, как браузер решает, какую функцию JavaScript использовать? Существуют ли браузеры, которые на самом деле создают отдельные объекты (функции) для каждого?

Спасибо

2 ответа

Решение

В javascript (почти) все является объектом, включая функции. При этом перезапись определения функции работает точно так же, как и перезапись переменной.

var myFunc = function () {
    alert('1');   
};

myFunc(); // alerts '1'

var myFunc = function () {
    alert('2');  
};

myFunc(); // alerts '2'

http://jsfiddle.net/KgKgf/3/

Обратите внимание, что объявление уже объявленной переменной не является хорошей практикой, и многие инструменты качества кода (jslint, jshint и т. Д.) Будут предупреждать вас об этом.

В этом конкретном случае:

function = startWidgetFunction() {
var param1 = $server.Variable1
var param2 = $server.Variable2
var param3 = $server.Variable3
}

Браузер выдаст ошибку, потому что function является зарезервированным ключевым словом.

Учитывая другое имя переменной, вы просто присваиваете значение (глобальной) переменной. Переменная будет перезаписываться новой (идентичной) функцией при каждом последующем выполнении скрипта виджета.

Другие вопросы по тегам