0

在观看http://www.youtube.com/watch?v=b0EF0VTs9Dc时,我发现了这种 javascript 代码

function unit(value) {
    var monad = Object.create(prototype);
    monad.bind = function (func, args) {
        return func.apply(undefined,
                       [value].concat(
                           Array.prototype.slice.apply(args || [])));
    }
    return monad;
}

被改写为

function unit(value) {
    var monad = Object.create(prototype);
    monad.bind = function (func, args) {
        return func(value, ...args);
    }
    return monad;
}

但是后者不能在 Chrome 和 firefox 中运行(我没有尝试 IE)。它是 Javascript 中的新东西,目前的浏览器还不支持吗?

4

1 回答 1

1

它是 Javascript 中的新东西,目前的浏览器还不支持吗?

是的,这是下一个版本的语言规范(ECMAScript 6)的一部分,它仍然是一个草案。

正如Dan Heberden 发布的链接中所述,它仅受 Firefox 支持,并且仅作为实验性支持。

其中一部分可以在当前的 JavaScript 中实现。例如,要获取传递给函数的所有额外的、未命名的参数:

function f(x) {
    var args = Array.prototype.slice.call(arguments, f.length);
    console.log(args);
}
f(1,2,3); // logs [2, 3]

或者,将它们传递给另一个函数:

function f(someFunc) {
    var args = Array.prototype.slice.call(arguments, f.length);
    someFunc.apply(null, args);
}
f(function(a,b){
    console.log(a, b);
}, 1, 2); // logs 1 2
于 2013-10-04T22:38:10.100 回答