#javascript
#javascript
Вопрос:
Я объявил глобальную:
var myClient;
У меня есть функция:
//Contact is a record object that has toString() which prints the name.
function getClient() {
myClient = new Object();
debug(input.contact); // This prints properly
myClient.contact = input.contact;
debug(myClient.contact); // This prints properly
}
У меня есть другая функция, которая пытается использовать то же самое:
function dispatchClient() {
debug(myClient.contact);
}
И результат, который я вижу, не определен. Здесь что-то не так? (Игнорируя аспект дизайна)
Если это неправильно, то как я могу передать состояние global между функциями? Если это не так, то хм, возможно, мне придется копать глубже!
Комментарии:
1. Вы не показали нам, как вы вызываете функции, и вы не показали нам, как
input
определяется.2. javascript чувствителен к регистру, т.е.
myclient
иmyClient
— это разные имена.3. Ты звонишь
getClient()
перед тем, как позвонитьdispatchClient()
? Это работает нормально: jsfiddle.net/f7xbK .4. Извините за опечатку. это только MyClient.
Ответ №1:
dispatchClient
вероятно, вызывается до того, как getClient
будет вызван. На этом этапе myClient
все еще было бы неопределенным.
Комментарии:
1. Если ‘input’ будет уничтожен после завершения функции ‘getClient’, будет ли MyClient по-прежнему действительным?
2. Если ‘input.name ‘ это Строка или Число, тогда да
3. Спасибо, что, если это объект, у которого есть вспомогательные свойства?
4. Да, потому что вы задаете имя prop, которое, как я предполагаю, является строкой, а не объектом. Если бы вы назначали весь входной объект MyClient, или если input.name это объект, тогда это было бы проблемой, потому что объекты передаются по ссылке.
5. Согласен, не могу придумать причину, по которой это не сработало бы, если сначала не вызвать dispatchClient . Если эти функции подключены как обработчики событий, то вполне возможно, что они вызываются в неправильном порядке. Если это так, то выполните проверку на нулевое значение MyClient в dispatch, и если оно равно null, вызовите getClient, чтобы настроить его, прежде чем делать что-либо еще
Ответ №2:
myclient
и myClient
— это две разные переменные.
но код все равно должен работать. если только вы не вызовете dispatchClient перед функцией getClient.
Комментарии:
1. Извините, не я. Up проголосовал за исправление моей орфографической ошибки
Ответ №3:
Если вы вызываете getClient() перед dispatchClient(), переменная MyClient * была бы неопределенной.
Другой возможностью является имя (с учетом регистра), в dispatchClient() вы используете my*C*lient, которое отличается от глобальной переменной my* c*lient.
Если возможно (зависит от вашего кода), создайте экземпляр в начале:
var myclient = new Object();
Ответ №4:
Ваш var является, myclient
пока вы используете объект позже как myClient
. Javascript чувствителен к регистру, поэтому это не одна и та же переменная.