柯里化
已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件:
1、返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数)
2、调用 a 之后,返回一个函数 b, b 的 length 属性值为 1
3、调用 b 之后,返回一个函数 c, c 的 length 属性值为 1
4、调用 c 之后,返回的结果与调用 fn 的返回值一致
5、fn 的参数依次为函数 a, b, c 的调用参数
function curryIt(fn) {
return function(a) {
return function(b) {
return function(c) {
return fn(a, b, c)
}
}
}
}
模块
完成函数 createModule,调用之后满足如下要求:
1、返回一个对象
2、对象的 greeting 属性值等于 str1, name 属性值等于 str2
3、对象存在一个 sayIt 方法,该方法返回的字符串为 greeting属性值 + ', ' + name属性值
function createModule(str1, str2) {
// return
// var obj = ;
return {
greeting:str1,
name:str2,
sayIt:function (){
return this.greeting+', '+this.name //注意逗号后面不要少了空格
}
}
}
乘法
求 a 和 b 相乘的值,a 和 b 可能是小数,需要注意结果的精度问题
function multiply(a, b) {
// 1.先将两个数转成字符串
let str1 = a.toString()
let str2 = b.toString()
// 2.获取小数点后的位数,不一定有小数位
let lenA = (str1.indexOf('.')===-1)?0:(str1.length - str1.indexOf('.')-1)
let lenB = (str2.indexOf('.')===-1)?0:(str2.length - str2.indexOf('.')-1)
// 3.取最精确的小数位数
let len = Math.max(lenA,lenB)
//把数字转换为字符串,结果的小数点后有指定位数的数字:
//toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。
return (a*b).toFixed(len);
}
改变上下文
改变上下文
function alterContext(fn, obj) {
return fn.bind(obj)();
}