Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ребят помогите, по любому возвращает undefined, хатя значени в самой функции верни (https://javascript.ru/forum/misc/48671-rebyat-pomogite-po-lyubomu-vozvrashhaet-undefined-khatya-znacheni-v-samojj-funkcii-verni.html)

stikagold 11.07.2014 23:41

ребят помогите, по любому возвращает undefined, хатя значени в самой функции верни
 
ребят помогите, по любому возвращает undefined, хатя значени в самой функции верни, почему? как можно это исправить и вчём причина?
Код JavaScript

var lang;

function GetURLArgument(arg){
$.post("url_arguments.php", { com: "GET_ARGUMENT", arg_post: arg})
.done(function(data) {
if(arg==="lang") lang = data;
return data;
});
}

lang = GetURLArgument("lang")

Добавлено через 7 часов 54 минуты
пробовал и по другому, например так

var url_arguments = new Object();
url_arguments.lang = "ru";

function GetURLArgument(arg, arg_val){
$.post("url_arguments.php", { com: "GET_ARGUMENT", arg_post: arg})
.done(function(data) {
if(arg==="lang") arg_val.lang = data;
return data;
});
}

GetURLArgument("lang", url_argument);

все равно значении меняется только локально

Erolast 12.07.2014 07:13

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

Sweet 12.07.2014 09:58

Цитата:

Сообщение от Erolast
Потому что ajax-запросы выполняются асинхронно.

Тут даже более общая проблема. Если ты передаешь аргументом в функцию foo функцию bar, это не значит, что функция foo вернёт то, что возвращает функция bar:
var x = foo(function bar() {
    return "value";
});

x == "value"; // может и равно, а может и нет

Т.е. важно понимать, что если одна функция что-то возвращает, то меньше всего это означает, что и другая функция вернёт то же.

newobject 13.07.2014 15:01

Цитата:

Сообщение от Sweet
Тут даже более общая проблема.

думаю, проблемы тут никакой нет. Все зависит от реализации foo


x=foo(function() {
return "value";
});

y=bar(function() {
return "value";
});

console.log(x=="value", y=="value")//true false
function foo(bar){return bar()}
function bar(bar){bar()}

Sweet 13.07.2014 15:13

newobject, ты вообще не понял, что я написать. Мысль в том и была, что "всё зависит от реализации".

newobject 13.07.2014 15:19

Sweet,
Ну а что тут "важно понимать"? Как по-другому ты себе это представляешь? Если бы в языке по умолчанию из ф-ции возвращалось последнее выражение, то можно было бы вопрос ставить. А так -- это самоочевидная вещь.

jsnb 13.07.2014 15:36

Цитата:

Сообщение от newobject (Сообщение 320831)
А так -- это самоочевидная вещь.

Которую некоторые не понимают и задают вопросы на форуме...

Sweet 13.07.2014 15:38

Цитата:

Сообщение от newobject
это самоочевидная вещь

3 дня на форуме, а уже рассказывает, что очевидно, а что нет. Это, между прочим, часто задаваемый вопрос.

newobject 13.07.2014 15:44

Sweet,
Sweet, если по-твоему это не очевидно, расскажи, как может быть иначе?

Sweet 13.07.2014 15:55

Цитата:

Сообщение от newobject
если по-твоему это не очевидно

Мне очевидно, что с тобой мне разговаривать не о чем.


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