Передача аргументов в функцию Javascript - PullRequest
0 голосов
/ 13 января 2019

Я изучаю функции, и мне интересно, в чем причина передачи или не аргументов при объявлении функции.

например. в блоке 1 я объявляю функцию, не передавая ни одного аргумента, и она работает правильно. Я повторяю то же упражнение в блоке 2, но в этом случае я также передаю аргументы, и в предупреждении отображается «NaN».

Спасибо!

БЛОК № 1

var integer1 = 10;
var integer2 = 20;

function sum () {
  sum = (integer1 * integer2);
  return sum; 
}

alert(sum());

БЛОК № 2

var integer1 = 10;
var integer2 = 20;

function sum (integer1, integer2) {
  sum = (integer1 * integer2);
  return sum; 
}

alert(sum());

Ответы [ 5 ]

0 голосов
/ 13 января 2019

Пока вы пишете свои функции, где-то вам нужно передать несколько значений для выполнения функции, или в другом случае ваше тело функции может выполняться самостоятельно. И они различаются как программист, так и логика, стоящая за задачей. Давайте рассмотрим приведенный выше пример,

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

блок 1

var integer1 = 10;
var integer2 = 20;

function sum () {
  sum = (integer1 + integer2);
  return sum; 
}

alert(sum());

, чтобы получить результат, вам нужно иметь integer1 & interger2 в теле, как у вас уже есть. поэтому логика вашей функции где-то зависит от других элементов. Это не очень хорошая практика, так как мы создаем функции для обработки конкретной логики, независимой от остальной части кода. Так что во всем процессе выполнения мы можем вызывать эту функцию, и она всегда будет вести себя одинаково.

блок 2

var integer1 = 10;
var integer2 = 20;

function sum (integer1, integer2) {
  sum = (integer1 + integer2);
  return sum; 
}

alert(sum());

Теперь в этом случае мы вызываем ту же функцию, но с параметрами. В этом случае сумматору нужно добавить как минимум 2 значения. Таким образом, в любой момент времени, когда мы вызываем эту функцию, она дает нам результат суммы передаваемых аргументов. Так что эта функция не зависит от var integer1 & var integer2, если мы передадим некоторые другие переменные этой функции, мы можем получить то же поведение.

Теперь нам нужно помнить, что когда мы вызываем функцию (как вы делаете внутри "alert(sum());"), нам нужно проверить, требует ли функция каких-либо параметров, если так, то мы должны передать ее в качестве аргументов, например

// define our adding function
function sum (a, b) {  // argument variables may have different variable names
  sum = (a + b);       // which only live within the function **scope**
  return sum;
}

//calling sum
sum(integer1, integer2); // we already declared these two variables integer1 & integer2

// calling sum with direct values
sum(5, 5);  // it returns 10

// now we have two new variables
var num1 = 50;
var num2 = 20;
sum(num1, num2);  // as we expect it returns 70

почему вы получили NaN

это языковая функция, так как вы используете Javascript, любая переменная, которая не определена, имеет значение undefined, вы можете сказать, что это свойство Javascript

NaN означает не число, когда мы выполняем операцию сложения, переменные аргумента внутри функции ожидают себя как переменная типа числа, но, следовательно, мы не передали никаких параметров при вызове функции sum(), integer1 & integer2 содержит свойство undefined, поэтому в результате вы получаете NaN.

как видите, я передаю два целочисленных значения 5, 5 для вызова sum, в другом случае num1, num2 переменных целочисленного типа для вызова sum.

* Если вы внимательно посмотрите на последнюю строку, вы увидите, что вы вызвали alert (). Это предопределенная функция, которую мы получаем из коробки языка программирования javascript. Но чтобы сделать оповещение о том, что он делает, нам нужно передать значение, тогда только оно может показать это значение в окне оповещения.

так что пока вы звоните alert(sum(integer1, integer2)); (ваш исправленный код) он сначала выполняет sum и возвращает значение из него, затем вызывает alert, используя возвращаемое значение, и принимает его в качестве аргумента для вызова самого себя. После этого мы получаем окно предупреждения с результатом добавления.

Спасибо, надеюсь, вы получите минимум знаний о функциях. Это общая концепция, а не только для JavaScript.

0 голосов
/ 13 января 2019

Похоже, этот вопрос в основном касается понимания того, как именно работают параметры. Вызов функции с параметрами по существу присваивает значения локальным переменным непосредственно перед выполнением остальной части кода функции.
Чтобы использовать ваш слегка отредактированный пример кода:

function product(integer1, integer2) {
  returnValue = integer1 * integer2;
  return returnValue; 
}

alert(product(10, 20));

Ключ к пониманию того, как это работает, заключается в том, что product(10, 20) назначит переданные значения каждому параметру в следующем порядке:

var integer1 = 10;
var integer2 = 20;

Только представьте, что функция содержит две вышеупомянутые строки в самом верху.

0 голосов
/ 13 января 2019

Аргументы удобны, потому что вы можете использовать одну и ту же функцию с любыми необходимыми значениями. В вашем БЛОКЕ 2 вы забыли передать аргументы, когда вызывали функцию sum.

alert(sum(integer1, integer2))

Поскольку вы не передали аргументы при вызове функции, они были неопределенными, а попытка умножить две неопределенные переменные привела к NaN.

0 голосов
/ 13 января 2019

Функция в блоке 2 использует переменные, ожидающие передачи. В этом случае вы ничего не передали, и поэтому integer1 и integer2 являются нулевыми ссылками / не определены.

Для block1 вы объявили глобальные переменные с целочисленными значениями, которые затем используются в функции.

0 голосов
/ 13 января 2019

Что касается вашей ошибки NaN, вы попытались вызвать повторно используемую функцию (функцию из BLOCK # 2), не передавая ей никаких аргументов, поэтому она не возвращает ничего, что, очевидно, Не является числом (NaN).


Блок № 1 Функция:

Первая функция не является функцией многократного использования, что означает, что каждый раз, когда вам нужно вычислить некоторые новые значения, вам придется обновлять переменные integer1 и integer2 соответственно следующим образом:

function sum() {
  return (integer1 * integer2); 
}

var integer1 = 5;
var integer2 = 10;
console.log(sum());

var integer1 = 11;
var integer2 = 31;
console.log(sum());

Блок № 2 Функция:

Вторая функция, однако, является многократно используемой функцией, которую можно вызывать снова и снова с различными аргументами, передаваемыми функции в качестве параметров, подобных этому:

function sum(integer1, integer2) {
  return (integer1 * integer2); 
}

console.log(sum(5, 25));
console.log(sum(8, 32));
console.log(sum(1, 3));
console.log(sum(5, 9));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...