Вопросы по оптимизации
Здравствуйте.
1. Возник вопрос если я выполняю get_array(array); то передается сам массив или ссылка на него?
var array = [1,2,3];
function get_array(a) {
alert(a[0]);
}
get_array(array);
ответ: По ссылке 2. Как мне лучше использовать document.getElementById();? в начале скрипта создать переменную с глобальной областью видимости и потом использовать внутри функций?
dom_link = document.getElementById('mydiv');
function my_alert() {
alert(dom_link.width);
}
function my_alert2() {
alert(dom_link.height);
}
или в каждой функции создавать новый var с ссылкой или может есть какий то другой варианты? ответ:
var dom_link = document.getElementById('mydiv');
function my_alert() {
alert(dom_link.width);
}
3.Есть 2 массива и в функции нужно выбрать какой использовать, не понимаю как правильно это сделать с стороны производительности ?
array1 = [];
array2 = [];
array1.push(1,2,3);
array2.push(4,5,6);
function set_array() {
....
if(i == 1) {
var g = array1;
}else{
var g = array2;
}
alert(g[0]);
}
ответ:
var array1 = [1,2,3];
var array2 = [4,5,6];
function set_array() {
....
var g = i == 1 ? array1 : array2;
alert(g[0]);
}
Заранее благодарю тех кто поможет. Большой Респект за: var $d = document; $d.byId = $d.getElementById;
var $ = function(elem/* id */) {
return typeof elem == 'string' ? document.getElementById(elem) : elem;
};
var g = i == 1 ? array1 : array2; |
Цитата:
Цитата:
|
поправил getElementById
|
Цитата:
Цитата:
Внутри метода, this, ссылается на область, из которой он (метод) вызывается. Теперь this будет ссылаться не на document, а на window. Если при этом, внутри метода, this как-либо используется, то метод может сработать не верно. Если нужно сократить запись, то лучше так: var $d = document; $d.byId = $d.getElementById; Теперь вместо document.getElementById можно писать $d.byId . Так же хороший вариант создать функцию:
var $ = function(elem/* id */) {
return typeof elem == 'string' ? document.getElementById(elem) : elem;
};
Цитата:
array1 = []; array2 = []; array1.push(1,2,3); array2.push(4,5,6); заменить на: array1 = [1, 2, 3]; array2 = [4, 5, 6]; И var-ы где надо добавить. Остальное нормально. |
Щикарненько
|
Цитата:
Цитата:
Цитата:
Цитата:
var g = i == 1 ? array1 : array2; |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
if(i == 1) {
var g = array1;
}else{
var g = array2;
}
на конструкцию: var g = i == 1 ? array1 : array2; |
Если я правильно понял то вместо этого
dom_link = document.getElementById('mydiv');
function my_alert() {
alert(dom_link.width);
}
нужно писать
var dom_link = document.getElementById('mydiv');
function my_alert() {
alert(window.dom_link.width);
}
|
Цитата:
Я специально не взял в цитату слово производительность, а привел более удобную в данном случае запись. hp5741, в данном случае получится то же самое, но var всегда лучше писать. И window лишний. |
Цитата:
Странно, раньше в ТС вроде вместо "dom_link = document.getElementById('mydiv');" было "dom_link = document.getElementById" . Вот я и подумал, что ТС, просто хочет сократить запись конструкции document.getElementById . Потому и туплю. В таком случае this здесь действительно не причем. Цитата:
|
Riim,
понятно. |
Просто после твоего поста прочитал про window и там было написано что сначало js ищет переменную в локальной области видимости потом в ниже лежащей и так пока не найдет так что если много вложений функций то будет галяк по этому и window как я понял
var array1 = [1,2,3];
var array2 = [4,5,6];
function set_array() {
....
var g = i == 1 ? window.array1 : window.array2;
alert(g[0]);
}
|
var g = i == 1 ? window.array1 : window.array2;
бл@ тут косяк при использовании window.array1 идет обращение к DOM а это накладно. |
Во-первых, без запятых ваше сообщение не сразу допрешь, как читать. Во-вторых, window -- это не DOM.
|
Цитата:
var g = window['array' + i]; естественно, переменная i должна быть 1 или 2 в данном случае. |
var g = window['array' + i]; а где про такие конструкции по подробней узнать можно? |
|
| Часовой пояс GMT +3, время: 13:04. |