gpt4 book ai didi

javascript - 定义函数时,为什么需要返回一个函数而不是直接返回我想要的值?

转载 作者:行者123 更新时间:2023-11-28 01:04:55 25 4
gpt4 key购买 nike

我对将一个函数嵌套在另一个函数中的概念很陌生,我不明白需要返回一个函数而不是立即返回我想要的值。

感谢任何帮助我消除困惑的帮助!

第一种方法(我本能地会写,但结果是错误的):

function wrapValue(n) {
var localVariable = n;
return localVariable;
}

var wrap1 = wrapValue(1);
var wrap2 = wrapValue(2);
console.log(wrap1());
console.log(wrap2());

// → Uncaught TypeError: number is not a function

我尝试了方法 1 的更简单版本,该版本有效(方法 1.1):

function wrapValue(n) {
var localVariable = n;
return localVariable;
}

console.log(wrapValue(6));
// → 6

第二种方法(正确方法):

function wrapValue(n) {
var localVariable = n;
return function() {
return localVariable;
};
}

var wrap1 = wrapValue(1);
var wrap2 = wrapValue(2);
console.log(wrap1());
console.log(wrap2());

// → 1
// → 2

为什么方法 1.1 有效,但方法 1 不起作用?为什么需要方法 2?

感谢您的帮助!

最佳答案

Why does method 1 not work when method 1.1 works?

因为在方法 1 中,您试图调用wrapValue 返回的值,就好像它是一个函数一样,但事实并非如此;它是一个数字(您传入的数字)。在方法 1.1 中,您直接使用返回值,而不是尝试像函数一样调用它。

让我们稍微分解一下:

var wrap1 = wrapValue(1);

现在,在 wrap1 中,我们有数字 1。不是一个函数,只是数字。因此,要使用该数字,我们只需直接使用它即可:

console.log(wrap1); // 1

您无法调用 wrap1,因为该变量不引用函数,而是包含一个数字。

And why the need for method 2?

如果您出于某种原因需要在调用函数wrapValue返回时访问localVariable,则只需要方法2 。下面的示例展示了这种情况可能会如何改变:

function doSomething(n) {
var num = n;
return function() {
++num;
return num;
};
}

var f = doSomething(0);
console.log(f()); // 1
console.log(f()); // 2
console.log(f()); // 3

因为调用函数doSomething会返回更改num变量的值,所以我们希望每次调用它时都能获取最新版本.

我使用了一个局部变量来使其与您的原始示例类似,但我们可以直接使用 n :

function doSomething(n) {
return function() {
++n;
return n;
};
}

var f = doSomething(0);
console.log(f()); // 1
console.log(f()); // 2
console.log(f()); // 3

函数参数实际上是函数中的局部变量。 (实际上,不是字面意义上的。)

关于javascript - 定义函数时,为什么需要返回一个函数而不是直接返回我想要的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25200962/

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