匿名函数在 Javascript 中不起作用? (或者也许我只是没有得到匿名函数)
Anonymous functions don't work in Javascript? (Or maybe I just don't get anonymous functions)
我对 JavaScript(和编码)还很陌生,我正在学习 Head First JavaScript 这本书。通过阅读,我认为匿名函数可以作为参数,因为函数是值,但我认为我可能错了。
下面的代码,按照我的想法,应该输出7
。相反,它输出,function () { return (m * n); }1
我对字符串做了类似的事情,但根据我的假设,它们也没有按预期处理。
请告诉我我对匿名函数的理解哪里出错了,在 javascript 中使用匿名函数的限制,以及为什么我们要使用匿名函数。非常感谢。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<p id="demo"></p>
<script>
function addIt(x, y) {
return (x + y);
}
var m = 2;
var n = 3;
var total = addIt(function() { return (m * n); }, 1);
document.getElementById("demo").innerHTML = total;
</script>
</body>
</html>
您没有调用 addIt()
中的函数。要调用一个函数,你必须在它后面加上 ()
。所以应该是:
function addIt(x, y) {
return (x() + y);
}
如果你想同时允许数字和函数作为参数,你可以使用if
来测试。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<p id="demo"></p>
<script>
function addIt(x, y) {
if (typeof x == 'function') {
x = x();
}
if (typeof y == 'function') {
y = y();
}
return (x + y);
}
var m = 2;
var n = 3;
var total = addIt(function() { return (m * n); }, 1);
document.getElementById("demo").innerHTML = total;
</script>
</body>
</html>
正如 Barmar 正确指出的那样,问题是您没有调用匿名函数,因此您是在 函数值 而不是 上进行加法数值(即函数的return值)。
where I have gone wrong in my understanding of anonymous functions
你真的没有。只要知道当一个匿名函数被赋值给一个变量时,它的使用几乎和一个普通函数一样(虽然有细微的差别)。
the limits in the use of anonymous functions in javascript
适用于任何其他类型值的相同限制。您可以将它作为参数传递给函数,将其保存在变量中等。当然,作为一个函数,您通常最终必须调用它来获取它的 return 值。
why we want to use anonymous functions ever
Closures, mainly. Also, important functions like setTimeout
期望一个函数作为参数,并且能够使一个函数使用一次然后再也不会使用是很有帮助的。
我对 JavaScript(和编码)还很陌生,我正在学习 Head First JavaScript 这本书。通过阅读,我认为匿名函数可以作为参数,因为函数是值,但我认为我可能错了。
下面的代码,按照我的想法,应该输出7
。相反,它输出,function () { return (m * n); }1
我对字符串做了类似的事情,但根据我的假设,它们也没有按预期处理。
请告诉我我对匿名函数的理解哪里出错了,在 javascript 中使用匿名函数的限制,以及为什么我们要使用匿名函数。非常感谢。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<p id="demo"></p>
<script>
function addIt(x, y) {
return (x + y);
}
var m = 2;
var n = 3;
var total = addIt(function() { return (m * n); }, 1);
document.getElementById("demo").innerHTML = total;
</script>
</body>
</html>
您没有调用 addIt()
中的函数。要调用一个函数,你必须在它后面加上 ()
。所以应该是:
function addIt(x, y) {
return (x() + y);
}
如果你想同时允许数字和函数作为参数,你可以使用if
来测试。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<p id="demo"></p>
<script>
function addIt(x, y) {
if (typeof x == 'function') {
x = x();
}
if (typeof y == 'function') {
y = y();
}
return (x + y);
}
var m = 2;
var n = 3;
var total = addIt(function() { return (m * n); }, 1);
document.getElementById("demo").innerHTML = total;
</script>
</body>
</html>
正如 Barmar 正确指出的那样,问题是您没有调用匿名函数,因此您是在 函数值 而不是 上进行加法数值(即函数的return值)。
where I have gone wrong in my understanding of anonymous functions
你真的没有。只要知道当一个匿名函数被赋值给一个变量时,它的使用几乎和一个普通函数一样(虽然有细微的差别)。
the limits in the use of anonymous functions in javascript
适用于任何其他类型值的相同限制。您可以将它作为参数传递给函数,将其保存在变量中等。当然,作为一个函数,您通常最终必须调用它来获取它的 return 值。
why we want to use anonymous functions ever
Closures, mainly. Also, important functions like setTimeout
期望一个函数作为参数,并且能够使一个函数使用一次然后再也不会使用是很有帮助的。