JavaScript 和编程初学者-传递函数解释

JavaScript and programming beginner - passing functions explanation

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);
<!DOCTYPE html>
<html lang="en">

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

<body>
</body>

</html>

我不明白函数转换的部分。这是书中的解释:

Admittedly, you could use these functions as is without any problem, but that wouldn’t result in a very interesting example. Instead, the third function, convert(), will be used to execute toCentigrade() and toFahrenheit():

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

This function takes the first parameter, converter, and uses it as a function. The second parameter, temperature, is then passed to converter() to perform the conversion and write the results to the document. The final two lines of code use convert() and pass it the appropriate converter function and temperature value:

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

Although this is certainly a more complex solution to a relatively simple problem, it demonstrates the fact that functions are values in JavaScript. We can assign them to variables and pass them to other functions.

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

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

convertertemperature作为参数传入。 converter 是一个函数,然后使用 temperature 作为参数调用。

这不是一个愚蠢的问题。

在JavaScript中,您可以将函数保存在一个变量中, 例如

var fun=function(){
}

并且您可以将此函数作为普通变量传递给另一个函数。(这也称为回调函数)

function2(fun);

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

在这里您调用了转换函数,并且您正在使用转换函数的第二个参数执行回调函数。

convert(toFahrenheit, 23);

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

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

上面的参数转换器只是对 toFahrenheit 函数的引用。所以,在这个例子中,代码:

converter(temperature);

等同于:

toFahrenheit(temperature);

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

也许使用替代语法对您来说会更清楚。

所以,这两个代码是等价的(确实只有一个 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 是一些数值。