[英]How return works in JS behind the scenes
我是JS的新手,想深入了解JS的收益是如何工作的。 例如,下面是一些代码示例: let num = function(){return 5}
和function number(){return 5} console.log(number())
。 问题是,例如,在第二个示例中,将传递给console.log()的number()替换为number()返回的值,即,console.log(number())会变成console。 log(5)在后台。 当我们从某个函数返回某些内容时,该函数将被其返回的值替换。 当我们从函数中返回一个值时,它会在幕后发生吗?
两者都为一个函数分配了一个名称,但是其中一个在运行时执行,另一个在编译时(或在运行开始时)执行,这就是为什么如果您调用数字,即使它在调用下面定义,它也是已知的,而对于另一个,它应该首先被分配。
当使用()调用函数时,两者的return
工作相同,返回值5。
有关JS结构的更多信息,我建议You don't Know JS
。 我不确定是否可以在这里建议一本书,但可以免费阅读: 您不懂JS
如果通过任何更改使我错了,并且您正在寻找一种传递实际功能的方法:
当您在console.log()
内部调用num()
或number()
,如下所示:
console.log(num())
它将首先处理'num()',然后返回值为'5',然后将该值传递到console.log(5)
console.log(value)
console.log(5)
。
如果您正在寻找一种将实际函数/表达式传递给子函数的方法,例如C#
LINQ
或Java
Stream
所做的事情,则需要辅助函数来自行调用该函数。 例如:
在这里我写了一个函数,当用户条件为真时,它会过滤掉数组的项...这里条件是一个函数,该函数由用户传递给该函数...并被辅助函数调用...
function filter(list, condition) {
let result=[];
for(let i = 0; i < list.length ; i++) {
if(condition(list[i])) {
result.push(list[i]);
}
}
return result;
}
let condition = function(item) {
return item.isOk;
}
您这样称呼它:
filter(myArray, condition)
注意:我使用condition
而不是'condition()',现在我们传递了实际函数,而不是该函数返回的值
在第一个示例中,您要为匿名函数yo分配一个变量num
。 这就是所谓的函数表达式。 但是函数尚未执行,因此num
仍为函数/对象。 要从函数中获取值,应在括号num()
执行该值。 或者,如果您想立即返回值并将其分配给变量,则应执行以下操作:
let num = (function () { return 5 })()
在第二个示例中,首先声明函数,然后在console.log
声明,然后在console.log
显示之前,执行该number
函数并返回5
,只有在此之后, console.log
将被执行,并将5
作为参数传递。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.