javascript后继者

javascript后继者,javascript,underscore.js,Javascript,Underscore.js,我最近在看一些JavaScript,遇到了以下例程。有人能给我解释一下它是怎么工作的吗 function groupConsecutive(numbers, successor) { successor || ( successor = function(n) { return n + 1; }); var groups = []; return _.each(numbers, function(number) { if (groups.length === 0) { g

我最近在看一些JavaScript,遇到了以下例程。有人能给我解释一下它是怎么工作的吗

function groupConsecutive(numbers, successor) {
successor || ( successor = function(n) { return n + 1; });
var groups = [];
return _.each(numbers, function(number) {
    if (groups.length === 0) {
        groups.push([number]);
    } else { 
        successor.call(this, _.last(_.last(groups))) === number ? _.last(groups).push(number) : groups.push([number]);
    }
}, this), groups;
}

具体来说,我试图理解
后继|{
位。如果我在这里使用“use strict”,它会抛出一个“预期的赋值或函数调用,而不是看到一个表达式”错误,所以我认为应该是这样,因为在调用函数之前从未定义后继函数。因此,按照我的思维方式,每当例程启动时,后继函数都是未定义的。此例程使用的是下划线.js库。

您要问的行

successor || ( successor = function(n) { return n + 1; });
是一种较短的书写方式:

if( successor === undefined ) {
    successor = function(n) { return n + 1; };
}
或:


你问的那句话

successor || ( successor = function(n) { return n + 1; });
是一种较短的书写方式:

if( successor === undefined ) {
    successor = function(n) { return n + 1; };
}
或:


表达式使用了
|
运算符的副作用。由于该运算符使用短路求值,因此仅当第一个操作数的求值结果为false时,才会对第二个操作数求值

因此,这一行:

successor || ( successor = function(n) { return n + 1; });
做与以下相同的事情:

if (!successor) {
  successor = function(n) { return n + 1; };
}
strict模式在抛出错误时是正确的,因为该行包含一个已计算的表达式,但结果被丢弃。通常这意味着您忘记对结果执行某些操作

如果使用以下形式,则可以在严格模式下使用
|
运算符:

successor = successor || function(n) { return n + 1; };

表达式使用了
|
运算符的副作用。由于该运算符使用短路求值,因此仅当第一个操作数的求值结果为false时,才会对第二个操作数求值

因此,这一行:

successor || ( successor = function(n) { return n + 1; });
做与以下相同的事情:

if (!successor) {
  successor = function(n) { return n + 1; };
}
strict模式在抛出错误时是正确的,因为该行包含一个已计算的表达式,但结果被丢弃。通常这意味着您忘记对结果执行某些操作

如果使用以下形式,则可以在严格模式下使用
|
运算符:

successor = successor || function(n) { return n + 1; };

|
是“or else”的缩写。您通常在变量声明中看到它,例如
var succession=succession |{}
。这意味着将
succession
设置为
succession
的当前值,或者如果它为null或未定义,则设置为新对象
|
是“or else”的缩写。您通常会在变量声明中看到它,例如
var succession=succession | |{}
。这意味着将
后继者
设置为
后继者
的当前值,或设置为空或未定义的新对象+1感谢解释它如何使用or运算符的副作用。+1感谢解释它如何使用or运算符的副作用。