首页 > 代码库 > js小题一道之valueOf&toString探究
js小题一道之valueOf&toString探究
如下:
var add = function() {___}; console.log(add(3)(4)(5)); // 输出60
题目要求能无限相乘,请补充add函数。
首先很显然,add函数必须返回一个带一个参数的function,不然无法进行后续的连乘操作;其次,乘到最后,没有参数了,add函数直接得把数值返回。其实这类似一个深搜的函数,根据n的值进行递归:
1 var add = function(n) {2 if(n === 5) 3 return n;4 return n * add(n + 1);5 }6 console.log(add(3));
第二行相当于没有参数时的判断操作,第四行相当于返回一个带参数的方法。此题的难点是值的累计,如果能设置一个全局变量保存值,将会方便很多,因为没有中间变量,而根据js函数特性又只能返回一个函数,不能返回函数与数字相乘的方式。如果能设置全局变量:
1 var add = function(n) {2 ans *= n;3 return add;4 }5 var ans = 1;6 add(5)(4)(3);7 console.log(ans);
因为要返回一个函数,又要实现值的累计,又不能外加变量,所以只能将累计的值作为参数传入。
1 var add = function(a) {2 var temp = function(b) {3 return add(a * b);4 }5 return temp;6 }
那么,add(3)(4)(5)在以上代码中是如何运作的?第一步a=3,b=4,运算后变成add(3*4)(5),第二步,a=12,b=5,运算后变成add(3*4*5),第三步a=60传入,temp方法return了,在控制台看到如下:
function (b) { return add(a * b);}
这时就要关注一下function的toString和valueOf方法。重写toString和valueOf方法,就能得到答案。
1 var add = function(a) { 2 var temp = function(b) { 3 return add(a * b); 4 } 5 temp.toString = temp.valueOf = function() { 6 return a; 7 } 8 return temp; 9 }10 console.log(add(3)(4)(5));
valueOf & toString:
的的
js小题一道之valueOf&toString探究
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。