评估顺序javascript

时间:2016-10-05 16:49:44

标签: javascript

我的任务是在javascript中编写函数f,

f(0)+f(1)//should return 0 if evaluated from left to right
         //should return 1 if evaluated from right to left

如何实现f函数?我正在考虑跟踪f之前是否被调用,但不知道如何调用。

方案解决方案如下:

(定义f   (让((设#f))     (定义(fn n)       (如果设置           0           (开始(设置!设置#t)                  N)))   FN))

3 个答案:

答案 0 :(得分:1)

Scheme解决方案似乎归结为

var f = (function() {
    var set = false;
    function fn(n) {
        if (set) {
            return 0;
        } else {
            set = true;
            return n;
        }
    }
    return fn;
}());

这有点无聊但预期。是的,您需要跟踪f之外的某个状态,声明一个额外的变量是最简单的解决方案。它不需要是全局的,set隐藏在IIFE的范围内。

答案 1 :(得分:1)

具有该功能属性的解决方案。



function f(v) {
    return [f.value || 0, f.value = v][0];
}

console.log(f(0) + f(1)); // 0






function f(v) {
    return [f.value || 0, f.value = v][0];
}

console.log(f(1) + f(0)); // 1




答案 2 :(得分:0)

我确定它的版本较短......

function f(arg) {
    if (!f.called && arg === 0) {
        f.called = true;
        return 0;
    } else if (f.called && arg === 1) {
        return 1;
    }

    return 0;
}