javascript题目,重写函数让其无限相加_javascript技巧

function add(x) {________}; alert(add(2)(3)(4)); //填空,使结果为9
解法一,

复制代码 代码如下:

//貘大
function add(x) {
var c = 0;
return function(x) {
c = c + x ; arguments.callee.toString = function(){
return c;
};
return arguments.callee;
}(x);
};
alert(add(2)(3)(4));

解法二,

复制代码 代码如下:

//三桂
function add(x) {
return function(y){
return function(z){
return x+y+z;
}
}
};
alert(add(2)(3)(4));

解法三,

复制代码 代码如下:

//司徒正美
function add (a){
if(!isFinite(add.i)){
add.i = a
}else {
add.i += a;
}
add.valueOf = add.toString = function(){
return add.i
}
return add;
}
alert(add(2)(3)(4))

其实上题就是考curry,详见我另一篇博文。
如果你有不同的解法,也请多多指教!

时间: 2024-12-21 20:18:26

javascript题目,重写函数让其无限相加_javascript技巧的相关文章

深入剖析JavaScript中的函数currying柯里化_javascript技巧

curry化来源与数学家 Haskell Curry的名字 (编程语言 Haskell也是以他的名字命名).   柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是逐步传参,逐步缩小函数的适用范围,逐步求解的过程.  柯里化一个求和函数 按照分步求值,我们看一个简单的例子 var concat3Words = function (a, b, c) {

浅谈Javascript中的函数、this以及原型_javascript技巧

关于函数 在Javascript中函数实际上就是一个对象,具有引用类型的特征,所以你可以将函数直接传递给变量,这个变量将表示指向函数"对象"的指针,例如: function test(message){ alert(message); } var f = test; f('hello world'); 你也可以直接将函数申明赋值给变量: var f = function(message){ alert(message); }; f('hello world'); 在这种情况下,函数申明

JavaScript中日期函数的相关操作知识_javascript技巧

时间对象是一个我们经常要用到的对象,无论是做时间输出.时间判断等操作时都与这个对象离不开.除开JavaScript中的时间对象外,在VbScript中也有许多的时间对象,而且非常好用.下面还是按照我们的流程来进行讲解JavaScript中日期函数. new Date() new Date(milliseconds) new Date(datestring) new Date(year, month) new Date(year, month, day) new Date(year, month,

JavaScript对象数组排序函数及六个用法_javascript技巧

分享一个用于数组或者对象的排序的函数.该函数可以以任意深度的数组或者对象的值作为排序基数对数组或的元素进行排序. 代码如下: /** * 排序数组或者对象 * by Jinko * date -- * @param object 数组或对象 * @param subkey 需要排序的子键, 该参数可以是字符串, 也可以是一个数组 * @param desc 排序方式, true:降序, false|undefined:升序 * @returns {*} 返回排序后的数组或者对象 * * 注意:

JavaScript中isPrototypeOf函数作用和使用实例_javascript技巧

JavaScript中isPrototypeOf函数方法是返回一个布尔值,指出对象是否存在于另一个对象的原型链中.使用方法: 复制代码 代码如下: object1.isPrototypeOf(object2) 其中object1为必选项,一个对象的实例. object2为必选项,另一个对象,将要检查其原型链. 如果 object2 的 原型链中包含object1,那么JavaScript中isPrototypeOf函数方法返回 true. 原型链可以用来在同一个对象类型的不同实例之间共享功能.

让JavaScript 轻松支持函数重载 (Part 1 - 设计)_javascript技巧

JavaScript支持重载吗? JavaScript支持函数重载吗?可以说不支持,也可以说支持.说不支持,是因为JavaScript不能好像其它原生支持函数重载的语言一样,直接写多个同名函数,让编译器来判断某个调用对应的是哪一个重载.说支持,是因为JavaScript函数对参数列表不作任何限制,可以在函数内部模拟对函数重载的支持. 实际上,在很多著名的开源库当中,我们都可以看到函数内部模拟重载支持的设计.例如说jQuery的jQuery.extend方法,就是通过参数类型判断出可选参数是否存在

JavaScript使用replace函数替换字符串的方法_javascript技巧

本文实例讲述了JavaScript使用replace函数替换字符串的方法.分享给大家供大家参考.具体如下: JavaScript通过replace函数替换字符串,下面的代码将Visit Microsoft中的MicroSoft替换成jb51.net <!DOCTYPE html> <html> <body> <p> Click the button to replace "Microsoft" with "jb51.net&qu

javascript 嵌套的函数(作用域链)_javascript技巧

嵌套的函数(作用域链) 当你进行函数的嵌套时,要注意实际上作用域链是发生变化的,这点可能看起来不太直观.你可把下面的代码置入firebug监视值的变化. 复制代码 代码如下: var testvar = 'window属性'; var o1 = {testvar:'1', fun:function(){alert('o1: '+this.testvar+'<<');}}; var o2 = {testvar:'2', fun:function(){alert('o2: '+this.testv

JavaScript Memoization 让函数也有记忆功能_javascript技巧

比如说,我们想要一个递归函数来计算 Fibonacci 数列.一个 Fibonacci 数字是之前两个 Fibonacci 数字之和.最前面的两个数字是 0 和 1. 复制代码 代码如下: var fibonacci = function (n) { return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); }; for (var i = 0; i <= 10; i += 1) { document.writeln('// ' + i +