Должен ли я инициализировать переменные в JavaScript со значениями по умолчанию?

Ahsen Kh спросил: 28 апреля 2018 в 08:43 в: javascript

У меня есть контроллер AngularJS. Я следую руководству Джона Папа в привязке переменных сверху. Мой вопрос: есть ли какой-либо прирост производительности при инициализации переменных со значениями по умолчанию при их объявлении или это негативно сказывается на производительности?

function someCtrl($scope) {
    var vm = this;
    vm.someVar = '';    // Should it rather be vm.someVar; ?
}

Я спросил об этом в контексте AngularJS. Тем не менее, это общий JavaScript-вопрос.

ОБНОВЛЕНИЕ: Как насчет следующего сценария?

function someCtrl($scope) {
    var someVar = '';    // Should it rather be var someVar; ?
}

1 ответ

Bergi ответил: 28 апреля 2018 в 08:53

vm.someVar = ''; - Если это скорее vm.someVar;?

Это не переменная и не объявление.

Это назначение, которое создает свойство в объекте vm. Напротив, vm.someVar; - это просто no-op (он ничего не делает) и должен вообще отбрасываться.

Да, если вы хотите создать свойства, которые вам нужны , чтобы инициализировать их. Вы можете инициализировать их с помощью undefined, но лучше инициализировать их значением по умолчанию того же типа, который у них будет позже. И да, это хорошая практика для создания свойств в конструкторе (при создании объекта) вместо добавления их после факта.

Ahsen Kh ответил: 28 апреля 2018 в 09:13
1. Можете ли вы ответить на один и тот же вопрос, но с var someVar вместо контекста vm.someVar? 2. Помимо хорошей практики, есть ли какие-либо убытки или выигрыш в производительности (даже малейший)?
Aleksey Solovey ответил: 28 апреля 2018 в 09:22
@AhsenKh this в контроллере используется как область действия вместе с синтаксисом controllerAs (в основном так же, как $scope.someVar). Переменная, ограниченная областью видимости, может отображаться в HTML как {{someVar}}. Использование var someVar тоже отлично, но оно не будет привязано к области видимости и поэтому вы не сможете показать его в HTML
Bergi ответил: 28 апреля 2018 в 09:36
@AhsenKh 1) Я объявляю переменные, где я их использую, поэтому я всегда их инициализирую. На самом деле это не имеет значения. 2) Да, создание объектов со всеми свойствами, которые им понадобятся, и не изменением их формы позже, лучше для производительности.