JavaScript函数中的参数

JavaScript函数中的参数,javascript,function,arguments,Javascript,Function,Arguments,我正在研究JavaScript函数是如何工作的,我想知道在声明函数时传递或不传递参数的基本原理是什么 例如,在下面的块1中,我声明了该函数,没有传递任何参数,它工作正常。我在块2中复制了相同的练习,但在本例中,我也传递了参数,并且警报显示为“NaN” 这是什么原因 第1区: 第2区: 关于NaN错误,您试图调用可重用函数(块#2中的函数),但没有向其传递任何参数,因此它不会返回任何明显不是数字(NaN)的内容 块#1功能: 第一个函数不是可重用函数,这意味着每次需要计算一些新值时,必须相应地更

我正在研究JavaScript函数是如何工作的,我想知道在声明函数时传递或不传递参数的基本原理是什么

例如,在下面的
块1
中,我声明了该函数,没有传递任何参数,它工作正常。我在
块2中复制了相同的练习,但在本例中,我也传递了参数,并且警报显示为“NaN”

这是什么原因

第1区: 第2区:
关于
NaN
错误,您试图调用可重用函数(块#2中的函数),但没有向其传递任何参数,因此它不会返回任何明显不是数字(NaN)的内容


块#1功能:

第一个函数不是可重用函数,这意味着每次需要计算一些新值时,必须相应地更新变量
integer1
integer2
,如下所示:

var integer1 = 10;
var integer2 = 20;
函数和(){
返回(整数1*整数2);
}
var整数1=5;
var整数2=10;
log(sum());
var整数1=11;
var整数2=31;

log(sum())参数很方便,因为您可以对所需的任何值使用相同的函数。在块2中,调用sum函数时忘记传递参数

alert(sum(integer1, integer2))

由于调用函数时未传递参数,因此参数未定义,尝试乘以两个未定义的变量会导致NaN。

block2中的函数正在使用预期传入的变量。在本例中,您没有传递任何内容,因此integer1和integer2是空引用/未定义


对于block1,您已经声明了具有整数值的全局变量,这些变量随后将在函数中使用。

看起来这个问题主要是关于理解参数的确切工作方式。带有参数的函数调用基本上会在执行其余函数代码之前将值分配给局部变量。
alert(sum(integer1, integer2))
要使用稍微编辑的示例代码,请执行以下操作:

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

alert(product(10, 20));
理解其工作原理的关键是
product(10,20)
将按如下顺序为每个参数分配传递的值:

var integer1 = 10;
var integer2 = 20;

想象一下,函数顶部包含了上面两行。

编写函数时,需要在某个地方传递一些值来执行函数,或者在另一种情况下,函数体可以自行执行。虽然任务背后的逻辑是相同的,但他们是不同的程序员。让我们考虑一下上面的例子,你已经给出,

我们需要实现的是一个简单的添加功能

第一区 要获得结果,您需要在正文中包含
integer1
interger2
,就像您已经拥有的那样。因此,函数的逻辑依赖于其他元素。这不是一个好的实践,因为我们构建函数来处理独立于代码其余部分的特定逻辑。 因此,在整个执行过程中,我们可以调用该函数,它总是执行相同的行为

第2区 现在,在本例中,我们使用参数调用相同的函数。在这种情况下,加法器至少需要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时,任何未定义的变量都会持有一个值
未定义的
,您可以说它是Javascript的属性

NaN不是一个数字,当我们执行加法运算时,函数中的参数变量期望自己是数字类型的变量,但是,因此在调用
sum()
函数时,我们没有传递任何参数,
integer1
&
integer2
持有未定义的属性,因此得到了NaN

如您所见,我传递两个整数值
5,5
来调用
sum
,在另一种情况下,
num1,num2
整数类型变量来调用
sum

*如果仔细查看最后一行,您会发现,您调用了alert()。它是一个预定义的函数,我们可以从javascript编程语言中获得它。但要执行警报,我们需要传递一个值,然后只有它才能在警报框中显示该值

因此,当您调用
alert(sum(integer1,integer2))(更正了您的代码)
它首先执行sum并从中返回值,然后使用返回值调用alert并将其作为参数来调用自身。然后,我们得到带有加法结果的警报框


谢谢,希望你能对函数有一个清晰的了解。这是一个通用概念,不仅仅是javascript。

第一个函数将外部变量相乘。第二个需要两个参数,但您没有传递任何参数。函数参数的调用方式与外部变量的调用方式相同,因此会对它们进行阴影处理。但是由于
sum()
两个都未定义,因此结果是
NaN
。否。声明参数,但从不传递任何参数。它应该是
sum(10,20)
。在函数中使用全局变量
sum
时也要非常小心,因为它也会覆盖相同名称的函数。是的,您使用的名称并不理想,可能会混淆。声明函数的更好方法是
函数和(A,b){returna+b;}
声明中的参数名用于引用过程
var integer1 = 10;
var integer2 = 20;

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

alert(sum(integer1, integer2));
// 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