Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.07.2017, 16:10
Аспирант
Отправить личное сообщение для shoopik Посмотреть профиль Найти все сообщения от shoopik
 
Регистрация: 02.07.2017
Сообщений: 83

js функция (нуб-вопрос)
Привет,
вопрос в следующем, если функция выглядит так:
function plus() {
	var num1, num2, result;
	num1 = document.getElementById('n1').value;
	num2 = document.getElementById('n2').value;
	num1 = parseInt(num1);
	num2 = parseInt(num2);
	result = num1+num2;
	document.getElementById('out').innerHTML = result;
};

То всё работает, делаю точно такую же на минус, всё ок.
Но можно ли вынести переменные за функцию ? Если делаю так:
var num1, num2, result;
	num1 = document.getElementById('n1').value;
	num2 = document.getElementById('n2').value;
	num1 = parseInt(num1);
	num2 = parseInt(num2);
	result = num1+num2;
	document.getElementById('out').innerHTML = result;

function plus() {
	result = num1+num2;
};

То нефига не работает, насколько я понял, если переменных нет внутри функции, то она ищет их снаружи ? Они же получаются объявлены до нее, почему она не хочет работать. То есть как вообще делают в таких ситуациях, если допустим две похожие функции как эти ?

Последний раз редактировалось shoopik, 22.07.2017 в 16:15.
Ответить с цитированием
  #2 (permalink)  
Старый 22.07.2017, 18:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от shoopik
То нефига не работает
А что вы хотите от функции? Ваша, во-первых, она не запускается, а во-вторых ничего полезного и не делает, хотя рабочая.
Ответить с цитированием
  #3 (permalink)  
Старый 22.07.2017, 18:20
Аспирант
Отправить личное сообщение для shoopik Посмотреть профиль Найти все сообщения от shoopik
 
Регистрация: 02.07.2017
Сообщений: 83

Сообщение от laimas Посмотреть сообщение
А что вы хотите от функции? Ваша, во-первых, она не запускается, а во-вторых ничего полезного и не делает, хотя рабочая.
ну к примеру есть два инпута и 2 кнопки ( сложить и вычесть ), так вот две функции для сложения-вычитания и есть.
т.е. две функции почти одинаковые, за исключением одного знака, я спросил можно ли как-то вынести одинаковую часть и сократить код в самих функциях, и как вообще в таких случаях делают опытные
Ответить с цитированием
  #4 (permalink)  
Старый 22.07.2017, 18:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от shoopik
так вот две функции для сложения-вычитания и есть.
Где? Есть одна, а то что второй раз прописано
function plus() {
    result = num1+num2;
}
так она ведь бесполезна. Это должно быть к примеру так

.....
document.getElementById('out').innerHTML = plus();
function plus() {
    return num1+num2;
}


Хотя так поступать в данном случае не стоит, функция должна принимать аргументы, с которыми производить операцию, возвращая результат. А прописать до нее все, а затем заставить сложить ранее определенное, в этом смысла нет.

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

function operation(a, b, o) {
    return o ? a - b : a + b
}

alert(operation(12, 7))
alert(operation(12, 7, 1))
Ответить с цитированием
  #5 (permalink)  
Старый 22.07.2017, 18:52
Аспирант
Отправить личное сообщение для shoopik Посмотреть профиль Найти все сообщения от shoopik
 
Регистрация: 02.07.2017
Сообщений: 83

Сообщение от laimas
Где? Есть одна, а то что второй раз прописано
Я пропустил её, вот так я имел
ввиду:
var num1, num2, result;
	num1 = document.getElementById('n1').value;
	num2 = document.getElementById('n2').value;
	num1 = parseInt(num1);
	num2 = parseInt(num2);
	result = num1+num2;
	document.getElementById('out').innerHTML = result;

function plus() {
	result = num1+num2;
};

function minus ()  {
result = num1-num2;
}

Сообщение от laimas
так она ведь бесполезна. Это должно быть к примеру так
.....
document.getElementById('out').innerHTML = plus();
function plus() {
    return num1+num2;
}
Если присвоить 'out' - 'plus', но там же есть еще и 'minus'.
Я закинул первоначальный код в планкер, чтобы было понятней что я хочу :
https://plnkr.co/edit/yaCgZZQ8MWqKiIyByhrN?p=preview
Ответить с цитированием
  #6 (permalink)  
Старый 22.07.2017, 18:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от shoopik
код в планкер
можно и тут
О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #7 (permalink)  
Старый 22.07.2017, 19:51
Аспирант
Отправить личное сообщение для shoopik Посмотреть профиль Найти все сообщения от shoopik
 
Регистрация: 02.07.2017
Сообщений: 83

Сообщение от рони Посмотреть сообщение
можно и тут
О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Да можно и сюда, просто в планкере мне кажется удобнее
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
 

</head>
<body> <input type="text" id="n1">
	<input type="text" id="n2"> <br><hr />
	<button onclick="plus()">PLUS</button>
	<button onclick="minus()">MINUS</button>
	<hr>
	<p id="out">Result:</p>



  <script>function plus() {
	var num1, num2, result;
	num1 = document.getElementById('n1').value;
	num2 = document.getElementById('n2').value;
	num1 = parseInt(num1);
	num2 = parseInt(num2);
	result = num1+num2;
	document.getElementById('out').innerHTML = result;
};
function minus() {
	var num1, num2, result;
	num1 = document.getElementById('n1').value;
	num2 = document.getElementById('n2').value;
	num1 = parseInt(num1);
	num2 = parseInt(num2);
	result = num1-num2;
	document.getElementById('out').innerHTML = result;
};
</script>
</body>
</html>
Ответить с цитированием
  #8 (permalink)  
Старый 22.07.2017, 20:57
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

выносить за функцию можно но вот это
num1 = document.getElementById('n1').value;

будет выполняться при загрузке когда инпуты пусты.

вынести можно сами элементы, а в функции получать их актуальный на текущий момент value

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>


</head>
<body> <input type="text" id="n1">
	<input type="text" id="n2"> <br><hr />
	<button onclick="plus()">PLUS</button>
	<button onclick="minus()">MINUS</button>
	<hr>
	<p id="out">Result:</p>

	<script>

		var num1 = document.getElementById('n1'),
		num2 = document.getElementById('n2'),
		out = document.getElementById('out');

		function plus() {
			result = num1.value*1+num2.value*1;
			out.innerHTML = result;
		}
		function minus() {
			result = num1.value*1-num2.value*1;
			out.innerHTML = result;
		}
	</script>
</body>
</html>
Ответить с цитированием
  #9 (permalink)  
Старый 22.07.2017, 22:07
Аспирант
Отправить личное сообщение для shoopik Посмотреть профиль Найти все сообщения от shoopik
 
Регистрация: 02.07.2017
Сообщений: 83

Сообщение от j0hnik Посмотреть сообщение
выносить за функцию можно но вот это
num1 = document.getElementById('n1').value;

будет выполняться при загрузке когда инпуты пусты.

вынести можно сами элементы, а в функции получать их актуальный на текущий момент value
Да да, вот это я и спрашивал Но имеет ли смысл так делать, я имею "по уму" лучше выносить или нет ? И еще вопрос почему мы берем именно value, ведь если их убрать, работать не будет, может это как то обзывается в JS ? Ну чтобы я мог почитать об этом, чтоб получше понять
Ответить с цитированием
  #10 (permalink)  
Старый 22.07.2017, 22:55
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от shoopik Посмотреть сообщение
Да да, вот это я и спрашивал Но имеет ли смысл так делать, я имею "по уму" лучше выносить или нет ? И еще вопрос почему мы берем именно value, ведь если их убрать, работать не будет, может это как то обзывается в JS ? Ну чтобы я мог почитать об этом, чтоб получше понять
если они нужны один раз то нет, если к ним придется обращаться много раз , из разных функций то да.
value это и есть значение в форме.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не срабатывает js функция при щелчке по div-у Alex_M45 Events/DOM/Window 6 23.12.2016 15:50
Не вызывается функция JS в HTML all4me1982 Общие вопросы Javascript 6 04.04.2014 20:08
Вопрос тем кто сталкивался с JS в Joomla 2.5 pulmar Элементы интерфейса 4 17.02.2013 20:40
Вопрос про подключение js prog90 Общие вопросы Javascript 4 03.01.2011 18:48
Вопрос к гуру. Title через js. Не выводит title из тега <TR> shkur Элементы интерфейса 24 19.06.2008 09:03