Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вариант описания функций (https://javascript.ru/forum/misc/30767-variant-opisaniya-funkcijj.html)

_Ivan 15.08.2012 09:15

вариант описания функций
 
Какой вариант описания функций предпочтительней? В двух словах почему? (я понимаю, что первый выполняется при загрузке)
//вариант 1
var math={
	raz:function raz(val){
		return val+1;
	},
	dva:function dva(val){
		return val+2;
	}
};
//вариант 2
function raz(val){
	return val+1;
}
function dva(val){
	return val+2;
}

ksa 15.08.2012 09:22

Цитата:

Сообщение от _Ivan
я понимаю, что первый выполняется при загрузке

Нет. Ничего там не выполняется... Оба варианта простое определение медодов и функций

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
//вариант 1
var math={
	raz:function raz(val){
		return val+1;
	},
	dva:function dva(val){
		return val+2;
	}
};
 //вариант 2
function raz(val){
	return val+1;
};
function dva(val){
	return val+2;
};
 // Вот и вся разница
alert(math.raz(1));
alert(raz(1));
</script>
</head>
<body>
</body>
</html>

ksa 15.08.2012 09:25

Как "преимущество" можно отметить вот такой вызов метода...

var math={
	raz:function raz(val){
		return val+1;
	},
	dva:function dva(val){
		return val+2;
	}
};
alert(math['raz'](1));

melky 15.08.2012 13:53

Цитата:

Сообщение от _Ivan
Какой вариант описания функций предпочтительней?

какой нравится.

B@rmaley.e><e 15.08.2012 23:15

В первом случае Вы засоряете пространство имён одним новым именем, во втором — двумя.Так что лучше первый. А вот между
//вариант 1
var raz = function raz(val){
		return val+1;
	},
	dva = function dva(val){
		return val+2;
	};

//вариант 2
function raz(val){
	return val+1;
}
function dva(val){
	return val+2;
}
Уже особой разницы нет.

_Ivan 16.08.2012 01:17

Сорри, плохой пример. Как такой?

var overlay={
	val:0.1,
	speed:10,
	init:function(){
		overlay.obj=createEl('div',{},{'display':'none','background':'#000','width':'100%','height':'100%','top':'0','left':'0','position':'fixed','zIndex':'98'});
	},
	show:function(){
		show(overlay.obj);
		if(overlay.val<0.7){
			setOpacity(overlay.obj,overlay.val+=0.02);
			setTimeout('overlay.show()',overlay.speed);
		}
	},
	hide:function(){
		if(overlay.val>0){
			setOpacity(overlay.obj,overlay.val-=0.02);
			setTimeout('overlay.hide()',overlay.speed);
		}
		else{hide(overlay.obj);}
	}
};

1. Эта ф-я выполняется ведь частично при загрузке (первые 2 строчки)?
2. Повторю вопрос, какой вариант лучше (второй писать не буду, смысл ясен)?

melky 16.08.2012 13:54

Цитата:

Сообщение от _Ivan
1. Эта ф-я выполняется ведь частично при загрузке (первые 2 строчки)?

там создаётся объект, и в него помещаются свойства. никакая функция не выполняется.

Цитата:

Сообщение от _Ivan
2. Повторю вопрос, какой вариант лучше (второй писать не буду, смысл ясен)?

лучше через наследование и ООП. а в этих двух случаях лучше то, что лучше читается.


Часовой пояс GMT +3, время: 21:24.