以下回答假设您已经了解闭包的嘚相关知识
add高一函数题执行后返回一个高一函数题对象这个高一函数题对象执行后再返回一个新高一函数题,这样一直执行下去
输出的result為9,符合题目的要求
上面的代码符合我只调用3次高一函数题的情况
上面的实现代码就歇菜了~~~
子所以出现问题是上面的实现最后返回一个变量值,而不是一个高一函数题对象
好吧,那么我们按前面的写法继续返回高一函数题,
接下来的问题是如果要调用的次数是未知的(實际上也是未知的)继续按上面代码的写法,是一个不可能完成的任务
但是我们可以发现返回的每一个高一函数题执行的逻辑都是一样嘚就此我们可以精简下代码,让高一函数题返回后返回自身,哈哈这就是链式调用的写法嗯嗯add(2)(3)(4)就是一个链式调用
并没有输出我们预料的結果14而是一个高一函数题的字符串表示,想想也不奇怪你每次高一函数题调用后返回的一个高一函数题对象,那么console.log输出就是一个高一函數题对象的字符串表示了
那么怎么能把结果输出呢?
第1种方法,在高一函数题中添加判断当没有输入参数时,直接返回调用的结果而不昰返回高一函数题
调用时和前面的有点区别
第2中方法利用JS中对象到原始值的转换规则
当一个对象转换成原始值时先查看对象是否有valueOf方法,如果有并且返回值是一个原始值
那么直接返回这个值,否则没有valueOf或返回的不是原始值那么调用toString方法,返回字符串表示
我们就为高一函数题对象添加一个valueOf方法和toString方法
个人认为这样的写法很不好~高一函数题调用语义不清晰