I use Firefox.
This code logs [].
var log = console.log;
function new_comb(aComb) {
var res = [];
log(aComb); // <- This is the line
for (var p in aComb) {
var peg = aComb[p];
var current = peg[peg.length - 1];
for (var i = 0; i < aComb.length; i++) {
if (i == p) continue;
if (current > aComb[i][aComb[i].length - 1]) continue;
var tmp = aComb.splice(0);
tmp[i].push(current);
tmp[p].pop();
res.push(tmp);
}
}
return res;
}
var comb = [
[3, 1],
[9, 2],
[15, 0]];
var res = new_comb(comb);
This code logs the correct value.
var log = console.log;
function new_comb(aComb) {
var res = [];
log(aComb); // <- This is the line
// note that I comment this out.
/*for (var p in aComb) {
var peg = aComb[p];
var current = peg[peg.length - 1];
for (var i = 0; i < aComb.length; i++) {
if (i == p) continue;
if (current > aComb[i][aComb[i].length - 1]) continue;
var tmp = aComb.splice(0);
tmp[i].push(current);
tmp[p].pop();
res.push(tmp);
}
}*/
return res;
}
var comb = [
[3, 1],
[9, 2],
[15, 0]];
var res = new_comb(comb);
Why is this happening?
var log = console.log.bind(console);to keep contextconsole.logor any other host-provided function:function log(msg) { return console.log(msg); }Host-provided functions can be (and are allowed to be) very squirrelly indeed. They're not guaranteed to havebind, and they're not guaranteed to work correctly when called via other references than their normative one.console's various functions,alert,prompt,confirm, all the DOM functions, ...