gpt4 book ai didi

Javascript 相同的方法签名

转载 作者:行者123 更新时间:2023-11-29 21:14:24 26 4
gpt4 key购买 nike

谁能解释一下为什么我们可以简单地将方法名称传递给高阶函数并且一切正常。我知道在 Java 之类的东西中,我必须分别对每个元素调用方法 words。有人告诉我,在 Javascript 中,如果方法签名匹配,我们可以简单地传入带有 () 的函数名称,它就会起作用。这很棒,但我想知道后台发生了什么。为什么我们能够在 javascript 中做到这一点?

function words(str) {
return str.split(" ");
}


var sentences = function(newArr){
return newArr.map(words);
}

最佳答案

在许多语言中,您可以将对函数的引用作为参数传递给函数。然后允许宿主函数使用该参数并在适当的时候调用该函数。这就是 Javascript 中发生的所有事情。当您传递函数名称后没有 () 时,您只是传递了对该函数的引用。这使宿主函数能够将该函数用作参数并在稍后调用它。

在您的特定示例中,.map() 希望您传入一个函数,它将为数组中的每个项目调用一次。因此,您传递了一个函数的名称,该函数将被多次调用,数组中的每个项目一次。您传递的那个函数有一些必须满足的契约。它将传递三个参数 (value, index, array) 并且它必须返回一个将用于构造新数组的值。

在 Javascript 中,由于语言没有参数类型检查,开发人员有责任确保您传递的函数的参数与该函数的调用者实际传递给它的参数匹配,您必须咨询调用代码本身的文档,以了解将传递给它的参数。您可以根据需要命名参数(这完全在您的函数实现内部),但参数的顺序和数量由调用者决定,您必须声明您的函数以匹配调用者将提供的内容。

曾经让 Javascript 中的许多人感到困惑。

如果您只传递一个函数名,那么您传递的是对该函数的引用(宿主函数可以在稍后调用的东西)。

array.map(myFn)        // passes a function reference

或者,使用内联函数(相同的结果):

array.map(function(value, index, arr) {
// code goes here
})

如果你把括号放在函数名的末尾,那么函数会立即执行,函数执行的返回值就是传递的值:

array.push(myFn());    // pushes the result of calling myFn()

关于Javascript 相同的方法签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40054045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com