Global var у Javascript

Це мене дратує.

Налаштування масиву на початку документа:

 var idPartner;

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

І одержуючи номер за адресою, яка є ідентифікатором партнера. Великий. Але я намагаюся встановити його без успіху:

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

В порядку. Оповіщення його даючи мені право число, але isnt встановлююче це.

Що не так?

Дякую!

0
Використовуйте символи [] замість new Array . (Це не вирішить цю конкретну проблему, але все одно краще).
додано Автор hugomg, джерело
Тому що я намагаюся отримати доступ до url, встановленого на myar [0] з ідентифікатором, але не працює. Це дає мені невизначене.
додано Автор Lucas Veiga, джерело
Чи можете ви спробувати відтворити проблему в jsfiddle.net ?
додано Автор Alex Turpin, джерело
якщо попередження дає вам правильний номер, то він був встановлений! я збентежений. чому ви думаєте, що це не встановлено?
додано Автор Andy, джерело
@Lucas Veiga Я пропоную почати використовувати "var myar = [];" для масивів.
додано Автор Bakudan, джерело
Як сповіщати правильний номер, але не встановлювати його?
додано Автор Jack, джерело

4 Відповіді

Зміна значення змінної не повторює значення в масиві. Тільки щось JavaScript не може зробити автоматично. Ви повинні повторно створити масив, щоб він мав новий ідентифікатор. Чи можна додати ідентифікатор до значення, де ви використовуєте масив замість попереднього встановлення значень в масиві, що містить ідентифікатор?

Змінити: наприклад, ви зробите:

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
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram