javascript后继者
我最近在看一些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
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运算符的副作用。