function add(x) {
let res = 0
res = res + x return function temp(y) {
if (arguments.length === 0) {
return res } else {
res = res + y return temp }
}}
由于最后返回的是一个函数,所以调用的时候要这么调用 add(1)(2)(3)() // 6
第二种方法
第二种方法就是重写add函数的toString和valueOf方法
function add(x) {
let res = 0
res = res + x var temp = function (y) {
res = res + y return temp }
temp.toString = temp.valueOf = function() {
return res }
return temp}add(1)(2)(3) // 6
LinkedList的原理是链表,所以定义节点,节点要有前驱后继和内容,其add、remove、get都是基于链表的遍历
add(2, 3)
add(2, 3) 没什么好说,就是函数内两个参数相加。
但是你这样写是没有扩展性的,如果让你实现add(2, 3, 4)的话就要修改函数了。
所以,
arguments
了解一下。arguments
是对应于传递给函数的参数,它是一个类数组对象。你可以使用
arguments
对象在函数中引用函数的参数。此对象包含传递给函数的每个参数的条目,第一个条目的索引从0开始。arguments
对象不是一个Array
。它类似于Array
,但除了length属性和索引元素之外没有任何Array
属性。例如,它没有pop
方法。但是它可以被转换为一个真正的Array
:var args = Array.prototype.slice.call(arguments)
实现:
add(2)(3)
看到add(2)(3)的时候就觉得这肯定是需要返回一个函数的,返回的函数也就是
add(2)
,于是思来想去加上各种尝试想到了一个笨办法。这个办法是把函数的参数相加作为结果返回,并没有延伸性,如果想要得到
add(2)(3)(4)
的值,这段代码就不能用了,代码要改成如下很明显这么写是没有尽头的,仔细观察上面的代码,我们可以发现有重复的部分,函数
add
不断的返回函数,然后进行参数相加。但是
console.log(add(1)(2)(3))
执行后发现返回的结果是一个函数,并不是我们想要的总和。那么怎么把结果输出呢?
第一种方法
利用我们上面学习的
arguments
,判断参数输入,如果没有参数输入的话,就返回总和,而不是返回函数。由于最后返回的是一个函数,所以调用的时候要这么调用
add(1)(2)(3)() // 6
第二种方法
第二种方法就是重写
add
函数的toString
和valueOf
方法作者:Molly6943
链接:https://www.jianshu.com/p/2a556b3cd335
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1.想要实现add()()这样调用方式,add()方法的返回值务必是一个函数,
function add(){
function sum(){
return sum; //需要支持多次调用,sum需要返回本身
}
return sum;
}
2.如何实现累加,这个时候需要使用到toString方法,当return sum的时候会尝试调用toString方法
function add(a){
function sum(b){
a = a+b;
return sum;
}
sum.toString = function(){
return a;
}
return sum;
}
console.log(add(1)(2)(3))
相关问题推荐
向一个对象数组里面添加新的属性var arry= [{a:11,b:22,c:33,d:44},{a:11,b:0,c:0,d:44},{a:11,b:22,c:99,d:99}];var arry2=[];arry.map(((item, index)=> {arry2.push(Object.assign({},item,{mess1:item.c,mess2:item.d}))}))cons...
我觉得getTopWindow() 应该是他自己写的函数 mask 应该是getTopWindow()函数中 return 出的一个什么玩意show() jQuery的显示
如图所示
1、原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有自己的原型,如果一个原型对象的原型不为 null 的话,我们就称之为原型链 2、 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链...
使用VS code对JS进行Debug,需要安装一个插件,这个插件是根据你所使用的浏览器来的,不同浏览器对应插件不同,以下是插件对应情况,下载完相应的插件以后还要下载一个live server在浏览器下查看你界面运行效果,记得在到设置里修改下live server的端口号,然...
没有基础,是可以学Java的,在网上也能找到很多免费的视频、学习资料等资源,只不过想要光靠自己摸索学透Java并不容易,最好是找一个比较靠谱的有实训的培训机构。不过,我给你点建议:1.脑子里要有编程思维,2.学习态度要有,3.了解了基本概念后,从图形界面...
假设文本框的id=text1js:document.getElementById(text1).value = 测试;//即可
这两个事件都是在js原生开发时经常会用到的,比如需要对页面dom进行动态处理,这时就需要用到DOMContentLoaded和[removed]事件,大家都知道,就是在dom构建完毕后,才可以对dom元素进行操作,否则会获取不到相应的dom元素,但是DOMContentLoaded和[removed]还...
基本概念CookieCookie 是小甜饼的意思。顾名思义,cookie 确实非常小,它的大小限制为4KB左右。它的主要用途有保存登录信息,比如你登录某个网站市场可以看到记住密码,这通常就是通过在 Cookie 中存入一段辨别用户身份的数据来实现的。localStoragelocalStor...
在vscode 头疼的问题是 用浏览器查看网页!会是以文件夹的方式打开的! 我遇到这个问题 我还重新配置了Apache ! 但是现在可以解决:使用vscode ==================== 打开cmd : 在cmd 控制台中输入 : 1.运行cnpm install live-server...
在进行对象之间的合并的时候,就会使用到extend方法进行合并语法结构:$.extend(true,{},对象1,对象2...)但是这里需要考虑一个问题,如果对象间有相同的属性名,就会涉及到哪一个对象和哪一个对象的值覆盖合并的问题,如果对象中的属性值还是一个对象的话,那...
先说下要实现什么功能,比如:限制图片大小不能超过30K,宽高为121x75上面需求提了,然后我直接把代码给你放出来,可以照着下面代码敲一遍试试就知道怎么限制图片宽高了 $(#picFile4).on(change,function(){ var imgFile = this.files[0]; va...
用python爬取近30天百度指数代码均转载,如下:#1.登录url = ‘http://index.baidu.com/’driver = webdriver.Chrome(executable_path=‘C:/Program Files(x86)/Google/Chrome/Application/chromedriver.exe’)driver.get(url)cookieList = [......
基本类型基本类型分为以下六种:string(字符串)boolean(布尔值)number(数字)symbol(符号)null(空值)undefined(未定义)注意:string 、number 、boolean 和 null undefined 这五种类型统称为原始类型(Primitive),表示不能再细分下去的基本类...
实体类中添加时间转换注解(注意时区问题)12345/** * 开始时间 */ @JsonFormat(pattern = yyyy-MM-dd HH:mm:ss, timezone=GMT+8) private Date startTime;
实例中包含加、减、乘、除四种运算,由于先乘和除的优先级别高,所以乘和除将首先被运算,接下来是加和减运算。乘和除优先级相同,所以左边的乘法将被先执行,然后是除法,接下来按从左到右的顺序进行加减运算...