编写一个对参数进行加法运算的CISDI_Cal函数
函数使用方法:
CISDI_Cal (0).toString() //输出0
CISDI_Cal (0)(1).toString() //输出1
CISDI_Cal (0)(1)(2).toString() //输出3
var v = CISDI_Cal (0)(1) ; v(2).toString() //输出3
编写一个对参数进行加法运算的CISDI_Cal函数
函数使用方法:
CISDI_Cal (0).toString() //输出0
CISDI_Cal (0)(1).toString() //输出1
CISDI_Cal (0)(1)(2).toString() //输出3
var v = CISDI_Cal (0)(1) ; v(2).toString() //输出3
这道题考察的是JavaScript
里面常用的函数闭包.
从前面三个示例与最后一个示例的对比可以知道:
CISDI_Cal(x);
返回的是一个JavaScript函数对象, 因为示例4的v
可以作为函数调用:v(2)
;
CISDI_Cal(y).toString()
返回累加到y
的结果. 也就是说, 返回的函数对象是带有toString
方法的.
function CISDI_Cal(x) {
// codes for 1.
function addMore(y) {
// 因为示例中可以累加, 所以如果有更进一步的调用,
// 那么用x封存已经累加的状态, 返回累加后的`addMore`函数
x += y;
return arguments.callee;
}
// codes for 2.
// 调用toString方法的时候, 返回累加到当前的总数.
addMore.toString = function () {
return x;
}
return addMore;
}
这个题用高阶函数即可。
function CISDI_Cal(number1) {
function plus(number2) {
number1 += number2;
return plus;
}
plus.toString = function() {
return number1;
}
return plus;
}
function CISDI_Cal(x){
function add(y){
x += y;
return arguments.callee;
}
add.toString = function(){
//console.log(x);
return x;
}
return add;
}
function CISDI_Cal(m){
var _n=0;
var fn = function(m){
_n += m;
return fn;
}
fn.toString = function(){
return _n;
}
return fn;
}
function CISDI_Cal(num){
CISDI_Cal.prototype.sum += num;
return CISDI_Cal;
}
CISDI_Cal.prototype.sum = 0;
CISDI_Cal.toString = function(){
return CISDI_Cal.prototype.sum.toString();
}
function CISDI_Cal(x) {
var fn = function(y) {
return CISDI_Cal(x + y);
};
fn.toString = function() {
return x;
};
return fn;
};
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
5 回答1.2k 阅读✓ 已解决
4 回答2.7k 阅读✓ 已解决