我正在研究函数,并且想知道在声明函数时传递或不传递参数的背后的原理是什么。
例如在块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());
答案 0 :(得分:1)
关于您的NaN
错误,您试图在不传递任何参数的情况下调用可重用函数(BLOCK#2中的函数),因此它不返回任何显然不是 Not Number < / em>(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));
答案 1 :(得分:0)
参数很方便,因为您可以将相同的函数与所需的任何值一起使用。在您的BLOCK 2中,您在调用sum函数时忘记传递参数。
alert(sum(integer1, integer2))
由于调用函数时未传递参数,因此它们是未定义的,并且尝试将两个未定义的变量相乘会导致NaN。
答案 2 :(得分:0)
block2中的函数正在使用预期要传入的变量。在这种情况下,您没有传递任何内容,因此integer1和integer2是空引用/未定义。
对于block1,您已声明具有整数值的全局变量,然后将它们在函数中使用。
答案 3 :(得分:0)
看起来这个问题主要是关于了解参数的确切工作方式。实际上,带有参数的函数调用会在执行其余功能代码之前将值分配给局部变量。
要使用经过稍微编辑的示例代码:
function product(integer1, integer2) {
returnValue = integer1 * integer2;
return returnValue;
}
alert(product(10, 20));
了解其工作原理的关键是product(10, 20)
会将传递的值依次分配给每个参数,如下所示:
var integer1 = 10;
var integer2 = 20;
想象一下该函数的最上方包含上述两行。
答案 4 :(得分:0)
在编写函数时,需要传递一些值来执行该函数,或者在其他情况下,函数主体可以自行执行。尽管任务背后的逻辑是相同的,但它们对于程序员而言却是不同的。让我们考虑上面给出的示例
我们需要实现的简单添加功能。
var integer1 = 10;
var integer2 = 20;
function sum () {
sum = (integer1 + integer2);
return sum;
}
alert(sum());
要获得结果,您需要像体内一样拥有integer1
和interger2
的内容。因此您函数的逻辑取决于其他元素。这不是一个好习惯,因为我们构建函数来处理独立于其余代码的特定逻辑。
这样我们就可以在整个执行过程中调用该函数,并且它始终会执行相同的行为。
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()
函数{{ 1}}和integer1
拥有undefined的属性,因此得到NaN。
如您所见,我传递两个整数值integer2
来调用5, 5
,在另一种情况下,传递sum
整数类型变量来调用num1, num2
。
*如果仔细观察最后一行,就会看到您调用了alert()。这是一个预定义的函数,我们可以从javascript编程语言中获取。但是要发出警报,我们需要传递一个值,然后只有它可以在警报框中显示该值。
因此,当您致电sum
时(已更正您的代码)
它首先执行sum并从中返回值,然后使用返回值调用alert并将其作为自变量。之后,我们将获得带有添加结果的警报框。
谢谢,希望您能对功能有所了解。这是一个笼统的概念,不仅限于javascript。