var fun1=function(){console.log('hello');}
var fun2=fun1
console.log(fun2);
Приведенный выше код, запущенный в Firefox, печатает fun2
. В Chrome он печатает тело функции, в Node.js — Function
.
Почему эта разница?
Как я могу получить поведение Firefox в Node.js?
Почему я это спрашиваю?
Я спрашиваю об этом, потому что хочу отлаживать код JS, сгенерированный из Idris, где среда выполнения JS использует явный стек вызовов, и я хотел бы распечатать содержимое стека вызовов осмысленным образом, и Firefox делает это лучше всего, но я хочу отлаживать код на Node.js, поэтому я хотел бы, чтобы Node.js печатал функции как Firefox, как я могу это сделать?
РЕДАКТИРОВАТЬ:
Типичная скомпилированная функция выглядит так:
var _idris__123_io_95_bind2_125_ = function(oldbase){
var myoldbase = new i$POINTER();
i$valstack_top += 1;
i$ret = new i$CON(65646,[i$valstack[i$valstack_base],i$valstack[i$valstack_base + 1],i$valstack[i$valstack_base + 2],i$valstack[i$valstack_base + 3],i$valstack[i$valstack_base + 4],i$valstack[i$valstack_base + 5]],_idris__123_APPLY0_125_$65646,null);
i$valstack_top = i$valstack_base;
i$valstack_base = oldbase.addr;
}
Так что здесь полезной информацией является само имя переменной _idris__123_io_95_bind2_125_
, и это то, что печатает Firefox
, а не node.js
, и в этом проблема, Firfox печатает полезную информацию, а node.js
нет.
Итак, вопрос в том, как я могу заставить node.js
печатать _idris__123_io_95_bind2_125_
для вышеуказанной функции?
РЕДАКТИРОВАТЬ 2:
К сожалению, некоторые из предложений не работают:
>cat deb.js
var fun1=function(){console.log('hello');}
var fun2=fun1
console.log(fun2);
console.log(fun2.name);
console.log(fun2.toString());
console.log(fun2+'');
>node deb.js
[Function]
function (){console.log('hello');}
function (){console.log('hello');}
>
console.log(fun2 + '');
- person Dmitri Pavlutin   schedule 08.03.2016