Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   функция в не очереди (https://javascript.ru/forum/misc/44925-funkciya-v-ne-ocheredi.html)

Gertasreg 06.02.2014 21:39

функция в не очереди
 
Здравствуйте, подскажите пожалуйста вот есть 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

И если можно объясните почему оно работает, а то в учебниках тяжело найти такой ответ )

danik.js 06.02.2014 23:49

Цитата:

Сообщение от Gertasreg
Типа сперва запустить функцию которая ниже функции first

Почему нет? Можно даже так:

function first() {}

last();
first();

function last() {}


Главное чтобы функция была объявлена в той же области видимости.

Gertasreg 06.02.2014 23:54

danik.js, Так это получается в любом месте можно обратится к функции если прописать ее в томже файле где она была создана?
А когда я впервые просматривал книгу по js там было написано что нужно чтобы функция была выше чем обращение к ней )

danik.js 07.02.2014 00:01

Цитата:

Сообщение от Gertasreg
А когда я впервые просматривал книгу по js там было написано что нужно чтобы функция была выше чем обращение к ней

Есть два вида функций:
функция-объявление:
function fn() {}

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

В первом случае расположение не имеет значения. Во втором конечно же переменная должна быть объявлена перед использованием.
Цитата:

Сообщение от Gertasreg
если прописать ее в томже файле где она была создана?

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

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

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


function fn() {}

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

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

Впрочем тут та же логика что и с переменными.

рони 07.02.2014 00:07

Цитата:

Сообщение от Gertasreg
А когда я впервые просматривал книгу по js там было написано что нужно чтобы функция была выше чем обращение к ней )

когда Function Expression

Gertasreg 07.02.2014 00:08

danik.js, спасибо за объяснения

Gertasreg 07.02.2014 00:18

рони, О ясно и понятно все написано спасибо за ссылку

Gertasreg 07.02.2014 00:26

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

os.one();

kostyanet 07.02.2014 04:46

Это функция ссылка на которую воткнута свойством объекта, типа метод.

kostyanet 07.02.2014 05:19

Цитата:

Сообщение от Gertasreg
как видно я запускаю сперва функцию last, а потом first(111) и в ней перезаписываю

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

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


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