Когда переменная была «оптимизирована», это просто означает, что она не изменяется в контексте текущей области. Следовательно, движок JavaScript проделал некоторую магию оптимизации и на время спрятал эту переменную. Например, предположим, что вы используете lodash для перебора какой-либо коллекции.
var parentThingy = [];
var childThingy = [];
_.each (collectionThingy, function(data){
// parentThingy is not being modified inside this callback
// so it will be "optimized away" while you are inside this
// function scope.
var transformed;
if (data.someFlag) {
transformed = transformDataSomehow(data);
}
// childThingy is being modified, so you will be able to
// see its value in the debugger.
if (transformed) {
childThingy.push(transformed);
}
});
// Now that you've exited the callback scope, you will be able to see
// the value of parentThingy again.
if (childThingy.length > 1){
parentThingy.push(childThingy);
}
Вы можете использовать предложение NOP, чтобы заставить parentThingy быть видимым в области обратного вызова, но, поскольку вы не изменяете parentThingy внутри этого обратного вызова, вам необходимо его видеть. Он не изменился и не изменится. Это не относится к коду, который вы сейчас отлаживаете. Как только вы выйдете из области обратного вызова, parentThingy снова станет видимым для отладчика.
К вашему сведению: это не проблема Firefox. Chrome делает то же самое, просто использует другую формулировку, чтобы указать, что переменная не имеет отношения к текущей области.
person
SeanH
schedule
02.10.2015