2014-10-15 3 views
0

Я просто новый javascript biginner, Если мне нужно многократно использовать (допустим, 20 раз) одну и ту же переменную, с точки зрения производительности, следует объявить ее один раз глобальным или объявить ее много раз в каждом контексте функции в локальной области (как я слышал)?Объявление многих локальных переменных против одного глобального?

Whats case сильфон лучше?

случае а:

var myvar = document.getElementById('case'); //global 

function one(){ 
myvar.innerHTML = 'newb'; 
... 
} 
function two(){ 
myvar.value = '3'; 
... 
} 

caseB:

function one(){ 
var myvar = document.getElementById('case'); //local 
myvar.innerHTML = 'newb'; 
... 
} 
function two(){ 
var myvar = document.getElementById('case'); //lobal 
myvar.value = '3'; 
... 
} 

caseC:

var myvar = document.getElementById('case'); //global 

function one(){ 
var myvar = document.getElementById('case'); //local 
myvar.innerHTML = 'newb'; 
... 
} 
function two(){ 
var myvar = document.getElementById('case'); //lobal 
myvar.value = '3'; 
... 
} 

ТНХ для советует,
гуй

+0

потому, что вы случае а нужно только выбрать элемент один раз. В других случаях ему нужно будет пересечь DOM, чтобы найти элемент с id 'case' каждый раз, когда вы вызываете' one' и 'two'. –

+0

Как @DavidSherret сказал. И вы не должны использовать caseC вообще. Это не дает ошибок, но с большим количеством кода вы путаетесь в именах var. –

ответ

1

Wrap случай А внутри крышки

(function() { 
    var myvar = document.getElementById('case'); 

    function one(){ 
    myvar.innerHTML = 'newb'; 
    ... 
    } 

    function two(){ 
    myvar.value = '3'; 
    ... 
    } 
})() 

сих пор ничего в глобальном масштабе, но доступ только DOM один раз.

+0

Могу ли я использовать myvar за пределами этой функции анонима, если нет, я должен убрать весь мой скрипт в этой функции анонима? – albator

+1

@albator Вы не можете использовать его снаружи, это личное для этого IIFE (сразу вызываемое выражение функции). И весь код в IIFE будет работать, но это не так, как вам следует идти. –

+0

, поэтому я могу безопасно поместить весь код страницы в функцию анонимного вызова и немедленно вызвать его! – albator

1

Корпус А должен быть лучшим, или если вы, как объектно-ориентированного программирования вы можете сделать:

function MyClass() { 
    this.element = document.getElementById('case'); 

    this.one = function() { 
     this.element.innerHTML = 'newb'; 
    } 
    this.two = function() { 
     this.element.value = '3'; 
    } 

    return this; 
} 

var myCls = new MyClass(); 
myCls.one(); 
myCls.two(); 
+0

Это любое преимущество использования объектных ориентированных вместо анонимной функции?! – albator

+0

Ядро ядра само по себе использует объектно-ориентированное программирование, оно более чище и проще отлаживать, а также избегать переполнения переменных. Они про и минусы, и это зависит от того, почему-когда-где вы будете использовать код. – fathyb