Глобальный var в Javascript

Меня это раздражает.

Im устанавливает массив в начале документа:

 var idPartner;

 var myar = new Array();
 myar[0] = "http://site.com/"+idPartner;

И я получаю номер по адресу, который является идентификатором партнера. Отлично. Но я пытаюсь установить его без успеха:

 $.address.change(function(event) {
   idPartner = 3;
   alert(idPartner);
 }

ОК. Предупреждение его дает мне правильный номер, но не устанавливает его.

Что не так?

Благодаря!

0
Используйте <�литерал [] вместо new Array . (Это не решит эту проблему, но все равно лучше).
добавлено автор hugomg, источник
Потому что я пытаюсь получить доступ к url, установленному на myar [0] с идентификатором, но не работает. Это дает мне неопределенность.
добавлено автор Lucas Veiga, источник
Можете ли вы попытаться воспроизвести проблему в jsfiddle.net ?
добавлено автор Alex Turpin, источник
если предупреждение дает вам правильный номер, то он был установлен! Я смущен. почему вы думаете, что он не установлен?
добавлено автор Andy, источник
@Lucas Veiga Я предлагаю начать использовать «var myar = [];» для массивов.
добавлено автор Bakudan, источник
Как он предупреждает о правильном количестве, но не устанавливает его?
добавлено автор Jack, источник

4 ответы

Изменение значения переменной не переустанавливает значения в массиве. Это просто что-то, что JavaScript не может сделать автоматически. Вам нужно будет повторно создать массив, чтобы он имел новый идентификатор. Не могли бы вы добавить id к значению, в котором вы используете массив вместо предварительной установки значений в массиве, содержащем идентификатор?

Изменить: Например, вы бы сделали:

var myArray = [];
var myId = 0;
myArray[0] = "http://foo.com/id/";

и когда вам нужно использовать значение из массива, вы должны сделать следующее:

var theVal = myArray[0] + myId;
4
добавлено
Еще в тот день, когда у ALGOL была опция pass-by-name, которая позволяла делать такие вещи. Странно, мм?
добавлено автор hugomg, источник
Отлично. Это было. Я создал функцию, чтобы установить ее для меня с id, что я хочу. Благодаря!
добавлено автор Lucas Veiga, источник

Попробуй это:

var myvar = ["http://site.com/"];


$.address.change(function(event) {
   myvar[1] = 3;
 }

затем используйте myvar.join (), где вам нужен полный URL-адрес.

1
добавлено

Проблема здесь в том, что на линии

myar[0] = "http://site.com/"+idPartner;

... вы выполняете конкатенацию строк, то есть вы копируете результирующую строку в массив в позиции индекса 0.

Следовательно, при более поздней установке idPartner это не повлияет на ранее скопированную скопированную строку. Чтобы избежать такого эффекта, вы можете либо всегда строить строку снова, когда переменная idPartner обновляется, или вы создаете объект, и вы оцениваете его, когда вам это нужно ...

var MyObject = function(){
   this.idPartner = 0; //default value
};

MyObject.prototype.getUrl = function(){
   return "http://site.com/" + this.idPartner;
};

Таким образом, вы можете использовать его как

var myGlblUrlObj = new MyObject();

$.address.change(function(event){
   myGlblUrlObj.idPartner = ... /setting it here
});

в какой-то более поздний момент вы можете всегда получить правильный URL-адрес, используя

myGlblUrlObj.getUrl();

Теперь, очевидно, это зависит от сложности вашей ситуации. Возможно, предлагаемое решение массива может работать, хотя я предпочитаю, чтобы он был инкапсулирован где-то в объект для лучшего повторного использования.

0
добавлено
myar[0] = "http://site.com/" + idPartner;

После этой строки myar [0] = "http://site.com/undefined" и не имеет ничего общего с переменной idPartner больше.

Итак, после этого изменение значения idPartner повлияет на значение myar [0] .

Вам нужно изменить значение myar [0] .

0
добавлено
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском