js题解(三)

文章目录

  • 柯里化
  • 模块
  • 乘法
  • 改变上下文

柯里化

已知 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)();
}

你可能感兴趣的:(js练习题,javascript,前端,html)