2011-04-08 3 views
1

Так что я боролся с этим, и поэтому я пришел сюда для ответов. Я чувствую себя немного новичком в JavaScript с этим вопросом, но здесь он идет.Объект Javascript пуст после возврата

У меня есть следующий код: этот

function a() { 
    var ret = {}; 
    //random stuff that get some other object 
    ret = someOtherObject; 
    alert(ret); 
    return ret; 
} 

var c = a(); 
alert(c); 

Проблема заключается в том, что «с» нулевой, но «RET» правильный объект. Объект не клонирован при возврате? «Ret» теряется и исчезает вне функции? Я не понимаю.

Благодарим за помощь. :)

+2

Вы уверены, что это все, что происходит. Предупреждение перед возвратом имеет значение, но предупреждение после вызова метода не происходит? Я уверен, что это больше, чем вы писали здесь. – Jamiec

+0

Что такое 'someOtherObject'? Измените тестовый файл так, чтобы он работал с целым или что-то еще, и когда это работает, медленно начинайте добавлять материал до тех пор, пока он не сломается. Тогда вы нашли преступника и можете опубликовать более конкретный вопрос. –

+0

@Kooilnv: Так что это не значит, что проблема на самом деле. –

ответ

2

Я полагаю, что если показанное a() не вернет правильный ответ, должно быть другое a(), которое вызывается вместо этого.

Таким образом, проблема в том, что в коде есть два a() с правильным определением, второе, которое вы нам не показываете.

+0

Огромное спасибо! :) – lamelas

-1

JavaScript является асинхронным, поэтому, если запущенная функция a() занимает некоторое время, переменная c по-прежнему равна null, если вызывается предупреждение перед возвратом(). Это можно устранить с помощью обратных вызовов, т.е. оберните код предупреждения в функцию и вызовите его из().

+0

-1 Если вы не используете асинхронные функции (Ajax), Javascript IS синхронно. – Capsule

+2

Я не согласен в нормальном javascript, код не является асинхронным –

-1

Имейте в виду, что в JavaScript переменные не нуждаются в определении ключевого слова var.

Это означает, что с линией

ret = someOtherObject; 
  1. Сначала определим переменную someOtherObject, который устанавливается в null по умолчанию.
  2. Затем назначить someOtherObject к ret (справа налево оценка)

Поэтому ret становится null.

+0

Пока вам не нужно 'var', чтобы определить их, переменные не определяются путем их ссылки, но только путем их назначения! 'someOtherObject' не будет разрешен. –

Смежные вопросы