JS, return 函数名
JS, return function name
我刚刚开始学习 javascript,遇到了一项我不理解的任务。任何人都可以解释为什么我们在这个例子中 return 函数名称 "return f" 以及我们使用 "f.toString" 的目的是什么?
function sum(a) {
var currentSum = a;
function f(b) {
currentSum += b;
return f;
}
f.toString = function() {
return currentSum;
};
return f;
}
alert( sum(1)(2) ); // 3
alert( sum(5)(-1)(2) ); // 6
alert( sum(6)(-1)(-2)(-3) ); // 0
alert( sum(0)(1)(2)(3)(4)(5) ); // 15
您正在返回对象。因此,您可以再次调用该函数,在第二次调用中,您将拥有一个 currentSum。
当您执行 sum(3) 时,该函数将保存数字 3,当您再次调用它执行 sum(3)(4) 时,它将向 currentSum 添加 4。
然后警报将调用 toString 方法并打印总和
看第一个例子
alert( sum(1)(2) ); // 3
sum(1) // will return f. sum must return a function in order for the syntax to work
之后它将 return f 变为:
alert( f(2) );
这是理解 JavaScript 类型系统的任务。任务是制作使用 currying 添加数字的函数。这个想法是制作在像这样调用时添加数字的函数 sum(1)(2)(3)
,正如您在任务中所写的那样。
我们在函数 sum
:
中做什么(查看您的代码)
1.
var currentSum = a;
在这里你在函数范围内声明了一个总和变量sum
。
函数 f(b) {
当前总和 += b;
return f;
}
然后声明将执行求和的函数。它 return 本身就有可能做这样的事情:f(1)(2)(3)
3.
f.toString = function() {
return currentSum;
};
声明f后,转换为字符串returns和值
- 比你return f 开始添加。
比 f.toString 怎么样 - 它被调用,当 f 作为参数传递 alert
时。这是 javascript
的自动转换
使用函数 sum
传递第一个参数 a
和 returning 函数 f
将 currentSum
与传递给 [= 的参数相加12=] (b
) 和 return 再次 f
你可以多次这样做,最后它会调用 alert
函数,它需要它的第一个参数是细绳。为此,您重写了函数 f
toString
上的方法,在这种情况下,return 将 currentSum
.
每个对象都有一个 toString() 方法,当对象要表示为文本值时会自动调用该方法。
让我们从简化版本开始:
function sum(currentSum) {
return function f(b) {
currentSum += b;
return f;
}
}
它会像你的一样工作,你可以这样做:
sum(1)(2)(3);//f
sum(1)(2);//f
但是,他们总是return一个函数,所以无法访问currentSum。它的总和 scope 并且由于它从未 returned 或通过,所以不可能得到它。所以我们可能需要另一个我们可以调用的函数来获取当前总和:
function sum(currentSum) {
function f(b) {
currentSum += b;
return f;
}
f.getSum = function() {
return currentSum;
};
return f;
}
所以现在 f 有一个 属性 (函数也是对象),这是一个名为 getSum 的函数来获取我们的变量
sum(1)(2)(3)//f
sum(1)(2)(3).getSum()//6 <= wohhooo
但是为什么我们称它为 toString 呢?
将变量添加到字符串时,将其转换为字符串,例如
1+"one"//"1one"
同样适用于objects/functions,但在这种情况下,js解析器首先尝试调用它们的toString方法,因此:
sum(1)(2)+"three"
等于
sum(1)(2).toString()+"three"
将非字符串传递给警报时会发生相同的转换。
我刚刚开始学习 javascript,遇到了一项我不理解的任务。任何人都可以解释为什么我们在这个例子中 return 函数名称 "return f" 以及我们使用 "f.toString" 的目的是什么?
function sum(a) {
var currentSum = a;
function f(b) {
currentSum += b;
return f;
}
f.toString = function() {
return currentSum;
};
return f;
}
alert( sum(1)(2) ); // 3
alert( sum(5)(-1)(2) ); // 6
alert( sum(6)(-1)(-2)(-3) ); // 0
alert( sum(0)(1)(2)(3)(4)(5) ); // 15
您正在返回对象。因此,您可以再次调用该函数,在第二次调用中,您将拥有一个 currentSum。
当您执行 sum(3) 时,该函数将保存数字 3,当您再次调用它执行 sum(3)(4) 时,它将向 currentSum 添加 4。
然后警报将调用 toString 方法并打印总和
看第一个例子
alert( sum(1)(2) ); // 3
sum(1) // will return f. sum must return a function in order for the syntax to work
之后它将 return f 变为:
alert( f(2) );
这是理解 JavaScript 类型系统的任务。任务是制作使用 currying 添加数字的函数。这个想法是制作在像这样调用时添加数字的函数 sum(1)(2)(3)
,正如您在任务中所写的那样。
我们在函数 sum
:
1.
var currentSum = a;
在这里你在函数范围内声明了一个总和变量sum
。
函数 f(b) { 当前总和 += b; return f; }
然后声明将执行求和的函数。它 return 本身就有可能做这样的事情:f(1)(2)(3)
3.
f.toString = function() {
return currentSum;
};
声明f后,转换为字符串returns和值
- 比你return f 开始添加。
比 f.toString 怎么样 - 它被调用,当 f 作为参数传递 alert
时。这是 javascript
使用函数 sum
传递第一个参数 a
和 returning 函数 f
将 currentSum
与传递给 [= 的参数相加12=] (b
) 和 return 再次 f
你可以多次这样做,最后它会调用 alert
函数,它需要它的第一个参数是细绳。为此,您重写了函数 f
toString
上的方法,在这种情况下,return 将 currentSum
.
每个对象都有一个 toString() 方法,当对象要表示为文本值时会自动调用该方法。
让我们从简化版本开始:
function sum(currentSum) {
return function f(b) {
currentSum += b;
return f;
}
}
它会像你的一样工作,你可以这样做:
sum(1)(2)(3);//f
sum(1)(2);//f
但是,他们总是return一个函数,所以无法访问currentSum。它的总和 scope 并且由于它从未 returned 或通过,所以不可能得到它。所以我们可能需要另一个我们可以调用的函数来获取当前总和:
function sum(currentSum) {
function f(b) {
currentSum += b;
return f;
}
f.getSum = function() {
return currentSum;
};
return f;
}
所以现在 f 有一个 属性 (函数也是对象),这是一个名为 getSum 的函数来获取我们的变量
sum(1)(2)(3)//f
sum(1)(2)(3).getSum()//6 <= wohhooo
但是为什么我们称它为 toString 呢?
将变量添加到字符串时,将其转换为字符串,例如
1+"one"//"1one"
同样适用于objects/functions,但在这种情况下,js解析器首先尝试调用它们的toString方法,因此:
sum(1)(2)+"three"
等于
sum(1)(2).toString()+"three"
将非字符串传递给警报时会发生相同的转换。