Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Вызов функции из отдельного скрипта (https://javascript.ru/forum/jquery/3332-vyzov-funkcii-iz-otdelnogo-skripta.html)

Igor88 08.04.2009 23:21

Вызов функции из отдельного скрипта
 
есть яваскрипт, вынесенный в файл
$(document).ready(function() {
$("#div1").click(function() {
alert( testf() );

});

function testf () {
return 'OK';
}

});
и второй яваскрипт в отдельном файле
$(document).ready(function() {

$("#div2").click(function() {
alert( testf() );

});

});
Как заставить работать клик на "Second element"
<div id="div1">First element</div>
<div id="div2">Second element</div>

Gvozd 08.04.2009 23:34

вынесите определение функции testf () из замыкания в глобальную область видимости

x-yuri 09.04.2009 04:57

там дело не в замыкании, а в том, что
function testf() { 
return 'OK';
}

это
var testf = function() { 
return 'OK';
}

т.е. внутренняя функция - локальна
если же написать
testf = function() { 
    return 'OK';
}

то все будет работать
я думаю так
p.s. Igor88, но это не значит, что нужно оставить определение функции внутри обработчика события load

Gvozd 09.04.2009 09:50

x-yuri,
функция объявленная внутри другой=функция видимая только в ее области видимости(если не определить руками в глоболку)=замыкание.
хотя тут не используется возможность testf() использовать локальные переменные "своего" обработчика onload(),но формально это замыкание.
вот, что я хотел сказать.
Но, ты прав:для новичка стоило подобрать другие слова.

Igor 09.04.2009 22:18

Спасибо
 
x-yuri Спасибо
Gvozd - видимость функции в глобальной области понятна и не представляет затруднений. Меня интересовало именно в обасти ready(). Я полагал что var testf =function() в области видимости всех document.ready()
В любом случае ответ получен, благодарю.

x-yuri 09.04.2009 23:46

Gvozd, ну вот по wikipedia:
Замыкание (англ. closure) в программировании — процедура, которая ссылается на свободные переменные в своём лексическом контексте
testf ни на что не ссылается. В чем я ошибаюсь?

Gvozd 10.04.2009 00:14

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


Часовой пояс GMT +3, время: 08:02.