JavaScript和编程初学者 - 传递函数说明

时间:2015-07-07 11:15:57

标签: javascript function parameter-passing

JS中的初学者,从书中学习,传递函数的例子对我来说并不清楚。这是代码:



function toCentigrade(degFahren) {
  var degCent = 5 / 9 * (degFahren - 32);
  document.write(degFahren + " Fahrenheit is " +
    degCent + " Celsius.<br/>");
}

function toFahrenheit(degCent) {
  var degFahren = 9 / 5 * degCent + 32;
  document.write(degCent + " Celsius is " +
    degFahren + " Fahrenheit.<br/>");
}

function convert(converter, temperature) {
  converter(temperature);
}
convert(toFahrenheit, 23);
convert(toCentigrade, 75);
&#13;
<!DOCTYPE html>
<html lang="en">

<head>
  <title>Chapter 4, Example 2</title>
</head>

<body>
</body>

</html>
&#13;
&#13;
&#13;

我不了解功能转换的部分。这是本书的解释:

  

不可否认,您可以毫无问题地使用这些功能,   但这不会产生一个非常有趣的例子。相反,   第三个函数convert(),将用于执行toCentigrade()和   toFahrenheit():

function convert(converter, temperature) {
 return converter(temperature);
}
     

此函数接受第一个参数convert,并将其用作a   功能。然后传递第二个参数temperature   converter()执行转换并将结果写入   文献。最后两行代码使用convert()并传递给它   适当的转换器功能和温度值:

convert(toFahrenheit, 23);
convert(toCentigrade, 75);
     

虽然这对于相对来说肯定是一个更复杂的解决方案   简单的问题,它证明了函数是值的事实   JavaScript的。我们可以将它们分配给变量并将它们传递给其他变量   功能

我不明白的可能是这个例子的本质 - 为什么参数是(converter, temperature),我们如何将temperature参数分配给converter(现在是函数内部函数)当temperature没有定义时 - 它只是一个单词(对我来说),在convert函数用于转换(toFahrenheit,23和toCentigrade,75):例如,函数toFahrenheit知道它应该查找convert函数以获取将转换结果写入网页所需的数字,如何?我的意思是,在这个例子中我们究竟如何连接所有三个函数导致将结果打印到网页? 基本上,我迷失了所有这一部分:

function convert(converter, temperature) {
   converter(temperature);
}
convert(toFahrenheit, 23);
convert(toCentigrade, 75);

4 个答案:

答案 0 :(得分:0)

转换器温度作为参数传入。 转换器是一个函数,然后以温度作为参数调用。

这不是一个愚蠢的问题。

答案 1 :(得分:0)

在JavaScript中,您可以在变量中保存函数, 对于前。

var fun=function(){
}

你可以把这个函数作为普通变量传递给另一个函数。(这也称为回调函数)

function2(fun);

你可以从function2执行乐趣。这将像函数指针一样工作。(但不完全是函数指针)

这里你正在调用convert函数,并且你正在使用convert函数的第二个参数执行回调函数。

答案 2 :(得分:0)

convert(toFahrenheit, 23);

将toFahrenheit函数作为convert函数的参数传递。因此:

function convert(converter, temperature) {
  converter(temperature);
}

上面的参数转换器只是对toFahrenheit函数的引用。因此,在此示例中,代码为:

converter(temperature);

与:

相同
toFahrenheit(temperature);

我认为你的书的作者只是想告诉你,如果需要,函数可以作为参数传递。

答案 3 :(得分:0)

使用替代语法可能会更清楚。

所以,这两个代码都是等价的(事实上只有一个tiny difference,但是让我们忽略它,这不是重点):

function toCentigrade(degFahren) {
    var degCent = 5 / 9 * (degFahren - 32);
    document.write(degFahren + " Fahrenheit is " + degCent + " Celsius.<br/>");
}

var toCentigrade = function(degFahren) {
    var degCent = 5 / 9 * (degFahren - 32);
    document.write(degFahren + " Fahrenheit is " + degCent + " Celsius.<br/>");
}

当您致电convert(toFahrenheit, 23)时,您会将函数和值传递给convert函数。

convert函数并不关心你如何调用它或如何在外部命名它的参数,convert你只知道converter是一个函数带有一个参数且temperature的对象是一些数值。