Как правильно объявить глобальные переменные

1

Я знаю о подъеме.

Но мне интересно, какое рекомендуемое решение для глобального массива, например, работает как таблица поиска. Массив, который вы бы объявили постоянным и сделать глобальным на большинстве языков.

Подобно:

 var lookup = ["010101010", "0100101010", "01010101010", "etc"];

 function foo() {    
     // lookup is undefined
 }

Наверное, я мог бы передать его. Или сделать его частью window.document. Или какой-то трюк с этим, что я не совсем понимаю. Какой лучший способ сделать это?

Изменить: Хорошо, после прочтения комментариев, теперь я понимаю, что проблема, которую я испытывал, не была вызвана подъемом. В моем коде была и другая проблема. Он работает сейчас. Спасибо, что поняли это.

  • 3
    Лучший способ - полностью избежать глобальных переменных.
  • 4
    lookup не определен в этой функции, если вы определяете lookup перед вызовом foo() .
Теги:
hoisting
global

2 ответа

1
Лучший ответ

Просто убедитесь, что вы объявляете lookup до foo функции foo. См. Следующий фрагмент. Если вы объявите его после foo, вы получите ошибку undefined.

var lookup = ["010101010", "0100101010", "01010101010", "etc"];
foo();
 function foo() {    
     console.log(lookup);
 }
  • 1
    Вы не получите «неопределенную ошибку», вы получите значение как undefined .
  • 0
    @teemu, простите за неправильное словоблудие. Я подправил это.
Показать ещё 1 комментарий
0

Если вы хотите сохранить некоторые статические данные, используйте статические методы:

class CONSTANT {

  /**
   * Public method that will return a new array you can manipulate
   *
   * It different of this.MY_CONSTANT = [X, Y, Z];
   *
   * Because accessing this.MY_CONSTANT will gives you an access to
   * the same element (if you modify it, it will get
   * modified for the next use of it)
   */
  static get MY_CONSTANT() {
    return [ 
        '010101010', 
        '0100101010',
        '01010101010',
    ];
  }

}

Для доступа:

CONSTANT.MY_CONSTANT

Ps: Это требует ES6

  • 0
    Я думаю, что вы хотите, чтобы class CONSTANT {} не class CONSTANT() {}
  • 0
    @Mark_M о да, определенно :) опечатка, спасибо
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню