Как браузеры обрабатывают несколько объявлений функций с одним и тем же именем? - PullRequest
2 голосов
/ 14 марта 2012

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

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

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

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

и

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

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

Спасибо, J

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

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

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

myFunc(); // alerts '1'

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

myFunc(); // alerts '2'

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

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

1 голос
/ 14 марта 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...