Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.02.2014, 21:39
Интересующийся
Отправить личное сообщение для Gertasreg Посмотреть профиль Найти все сообщения от Gertasreg
 
Регистрация: 17.10.2013
Сообщений: 17

функция в не очереди
Здравствуйте, подскажите пожалуйста вот есть 2 функции и один созданный объект

var MHS = {
	listingId: 0
}


function first(id) {
	MHS.listingId = id;
}

function last() {
	$(document).click(function() {
		alert(MHS.listingId)
	})
}

last();
first(111);


как видно я запускаю сперва функцию last, а потом first(111) и в ней перезаписываю свойство listingId объекта MHS дальше $(document).click при клике на документ выводит перезаписанный объект 111 все нормально работает, вопрос в том можно ли так делать? Типа сперва запустить функцию которая ниже функции first

И если можно объясните почему оно работает, а то в учебниках тяжело найти такой ответ )
Ответить с цитированием
  #2 (permalink)  
Старый 06.02.2014, 23:49
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Gertasreg
Типа сперва запустить функцию которая ниже функции first
Почему нет? Можно даже так:

function first() {}

last();
first();

function last() {}


Главное чтобы функция была объявлена в той же области видимости.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 06.02.2014, 23:54
Интересующийся
Отправить личное сообщение для Gertasreg Посмотреть профиль Найти все сообщения от Gertasreg
 
Регистрация: 17.10.2013
Сообщений: 17

danik.js, Так это получается в любом месте можно обратится к функции если прописать ее в томже файле где она была создана?
А когда я впервые просматривал книгу по js там было написано что нужно чтобы функция была выше чем обращение к ней )
Ответить с цитированием
  #4 (permalink)  
Старый 07.02.2014, 00:01
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Gertasreg
А когда я впервые просматривал книгу по js там было написано что нужно чтобы функция была выше чем обращение к ней
Есть два вида функций:
функция-объявление:
function fn() {}

и функция-выражение:
var fn = function() {}

В первом случае расположение не имеет значения. Во втором конечно же переменная должна быть объявлена перед использованием.
Сообщение от Gertasreg
если прописать ее в томже файле где она была создана?
Я такого не говорил. Если функция объявлена глобально, то вызвать ее можно из любого файла. Но если функция находится внутри другой функции, то она "невидима":

function abc() {
    function fn() {}
}

fn() // Ошибка!


function fn() {}

function abc() {
    fn() // ОК! 
}

function abc() {
    function fn() {}
    fn() // ОК! 
}

Впрочем тут та же логика что и с переменными.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 07.02.2014, 00:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от Gertasreg
А когда я впервые просматривал книгу по js там было написано что нужно чтобы функция была выше чем обращение к ней )
когда Function Expression
Ответить с цитированием
  #6 (permalink)  
Старый 07.02.2014, 00:08
Интересующийся
Отправить личное сообщение для Gertasreg Посмотреть профиль Найти все сообщения от Gertasreg
 
Регистрация: 17.10.2013
Сообщений: 17

danik.js, спасибо за объяснения
Ответить с цитированием
  #7 (permalink)  
Старый 07.02.2014, 00:18
Интересующийся
Отправить личное сообщение для Gertasreg Посмотреть профиль Найти все сообщения от Gertasreg
 
Регистрация: 17.10.2013
Сообщений: 17

рони, О ясно и понятно все написано спасибо за ссылку
Ответить с цитированием
  #8 (permalink)  
Старый 07.02.2014, 00:26
Интересующийся
Отправить личное сообщение для Gertasreg Посмотреть профиль Найти все сообщения от Gertasreg
 
Регистрация: 17.10.2013
Сообщений: 17

danik.js,
рони,
Если можно подскажите как такое работает
Вроде это получается Function Expression но оно както работает
var os = {
	one: function () {
		this.two(22);
	},
	
	two: function(id) {
		alert(id)
	},
}

os.one();
Ответить с цитированием
  #9 (permalink)  
Старый 07.02.2014, 04:46
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Это функция ссылка на которую воткнута свойством объекта, типа метод.
Ответить с цитированием
  #10 (permalink)  
Старый 07.02.2014, 05:19
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от Gertasreg
как видно я запускаю сперва функцию last, а потом first(111) и в ней перезаписываю
Ваши ласты ничего кроме программирования прерывания по щелчку не делают. Вызвать такую "функцию" можно только один раз. Остальные вызовы бессмысленные.

Запрограммировать прерывание можно в каком угодно месте до того, как оно потребуется. Как правило такие вещи вешают на событие загрузки страницы.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция и несуществующий id Ankh Элементы интерфейса 4 10.02.2012 23:49
функция не успевает Sadist_dead Элементы интерфейса 22 02.10.2011 19:00
Где вызывается функция? cradis Общие вопросы Javascript 5 23.04.2011 13:47
Mootools функция periodical не работает по id Jumong Общие вопросы Javascript 2 11.09.2010 16:42
Рекурсивная функция HellBells Общие вопросы Javascript 3 23.11.2009 11:23