有趣的JavaScript面试题(持续更新)

99 阅读1分钟

1.实现下面的函数达到下面的效果

console.log(one(add(two()))) // 3
console.log(two(add(one()))) // 3

console.log(two(plus(one()))) // 2
console.log(one(plus(two()))) // 2

console.log(one(subtract(two()))) // -1
console.log(two(subtract(one()))) // 1

console.log(one(divide(two()))) // 0.5
console.log(two(divide(one()))) // 2

答案(请先思考再看答案)

点击查看答案
function add (num) {
    return function op () {
        return this.value + num
    }
}
function plus (num) {
    return function op () {
        return this.value * num
    }
}
function subtract (num) {
    return function op () {
        return this.value - num
    }
}
function divide (num) {
    return function op () {
        return this.value / num
    }
}

function one (op) {
    const tmp = {
        value: 1,
        op: op || function op () {
            return this.value
        }
    }
    return tmp.op()
}

function two (op) {
    const tmp = {
        value: 2,
        op: op || function op () {
            return this.value
        }
    }
    return tmp.op()
}