Область видимости переменных js

F
На сайте с 06.02.2012
Offline
124
526

Может и детский вопрос. Но читаю, везде советуют избегать в js переменных, заданных неявно, типа a1 = value;

Если я обычно делаю примерно так...

<script>

var array = [1,3,5,7,9]

var a = 4;

search (array,a);

alert (a1);

alert (a2);

function search(array,a) { // поиск двух ближайших значений в массиве

for (var i = 0; i < array.length; i++)

{

a1 = array; a2 = array[i-1];
if (a1 > a ) { return }
}
}
</script>

Скрипт выполняется. Но, если это дурной тон, как принято возвращать переменные из функции, если я их определю в функции правильно - var a1 = ...; var a2 =...;

[umka]
На сайте с 25.05.2008
Offline
456
#1

Переменные из функции возвращаются оператором return.

Лог в помощь!
F
На сайте с 06.02.2012
Offline
124
#2
Переменные из функции возвращаются оператором return.

А как правильно это сделать в моём примере?

arztx
На сайте с 22.08.2005
Offline
110
#3

Можно в функции вместо return поставить break; и вернуть переменные в виде массива return [a1, a2] или хеша return {a: a1, b: a2}.

Или прямо в вашем return вернуть массив или хеш, поставив return [a1, a2] или что там вам нужно вернуть.

Область видимости будет та, где объявите переменные.

Мониторинг позиций сайта в поисковиках (https://ru.serpseeker.com/)
[umka]
На сайте с 25.05.2008
Offline
456
#4

Возвращаете массив так же как и одну переменную.


function f() {

return [123,456];
}
var result=f();
alert('Result: '+result[0]+', '+result[1]);
F
На сайте с 06.02.2012
Offline
124
#5

Понял. Спасибо!

А чем чреват мой вариант?

У меня много скриптов работают так. Вроде проблем не возникало...

S
На сайте с 13.10.2014
Offline
171
#6
А чем чреват мой вариант?

Если много будет переменных - запутаетесь.

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

F
На сайте с 06.02.2012
Offline
124
#7
silicoid:
Он считается некрасивым

Ну это же лирика...

Насколько я понимаю, количество глобальных переменных по возможности надо свести к минимуму. Чтоб не пересекались.

Если на странице много скриптов, и каждый программер оставил кучу неявных или глобальных переменных - может начаться конфликт..

Мой более корректный вариант тогда будет выглядеть вот так...

<script>

var array = [1,3,5,7,9]

var a = 4;

var result = search(array,a);

var a1 = result[0]; var a2 = result[1];

alert (a1);

alert (a2);

function search(array,a) { // поиск двух ближайших значений в массиве

for (var i = 0; i < array.length; i++)

{

var a1 = array; var a2 = array[i-1];
if (a1 > a ) { return [a1, a2] }
}
}
</script>

---------- Добавлено 16.03.2015 в 16:57 ----------

Проверяю свою скрипты... кое где корректирую...
Ещё нашёл похожие накладки, только не при возврате из функции, а наоборот, при передаче в дальнюю функцию.
Вот упрощённый пример.
Вынужден был обьявить A и B без var, чтоб они были доступные в функции show(). в F1() они не используется.
Как правильно передать A и B в такой ситуации?

<script>
function summa()
{
A = 2; B = 3;
F1();
}
function F1()
{
var c = 4;
show(c);
}
function show(c)
{
var d = 5;
var e = A + B + c + d ;
alert (e);
}
summa () ; // есть сумма = 14
</script>

F
На сайте с 06.02.2012
Offline
124
#8

Блин... торможу.. Тут всё проще. Извиняюсь.

<script>

function summa()

{

var A = 2; var B = 3;

F1(A,B);

}

function F1(A,B)

{

var c = 4;

show(A,B,c);

}

function show(A,B,c)

{

var d = 5;

var e = A + B + c + d ;

alert (e);

}

summa () ; // есть сумма = 14

</script>

Всем спасибо! Вопрос закрыт.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий