Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
B.test() — классическое замыкание. Теоретически, переменная A может быть переопределена где-то до вызова этого метода, в итоге, мы получим не то, что нужно. Причем это может произойти как раз из-за обфускации (неверный расчет области видимости из-за замыкания). Т.е. на входе были разные переменные, на выходе — одна, области использования которой (из-за замыкания опять-таки) могут пересекаться.window.eval, а не пытаться обойти логику обфускатора.(function(){
var A="a";
var B={
test:function(){
var D="b";
var C=window["eval"](function(){
alert(A+D)
});
C()
}
};
var E={
modify:function(){
var D="e";
var C=(function(){
A='x';
});
C()
}
};
//very-very dirty assignment
window.onclick=E.modify();
B.test();
//here click occurs
B.test();
})();(function(){
var A=«a»;
var B={
test:function(){
var D=«b»;
var C=window[«eval»](function(){
alert(A+D)
});
C()
}
};
var E={
modify:function(){
var D=«e»;
var C=(function(){
A='x';
});
C()
}
};
B.test();
//very-very dirty assignment
window.onclick=E.modify();
//here click occurs
B.test();
})();
(function(){
var TOPLONGNAME = 'a';
var obj = {
test: function(){
var LOCALLONGNAME = 'b';
var res = window.eval(function(){
alert(TOPLONGNAME + LOCALLONGNAME);
});
res();
}
}
var E={
modify:function(){
var LOCALLONGNAME=«e»;
var C=(function(){
TOPLONGNAME='x';
});
C()
}
};
obj.test();
//very-very dirty assignment
window.onclick=E.modify();
//here click occurs
obj.test();
})()
var E={
modify:function(){
var LOCALLONGNAME=«e»;
var C=(function(){
_NEW_TOPLONGNAME='x';
});
C()
}
};(function(){
var TOPLONGNAME = 'a';
var obj = {
test: function(){
var LOCALLONGNAME = 'b';
var res = window['eval'](function(){
alert(TOPLONGNAME + LOCALLONGNAME);
});
res();
}
}
var E={
modify:function(){
var LOCALLONGNAME=«e»;
var C=(function(){
_NEW_TOPLONGNAME='x';
});
C()
}
};
obj.test();
//very-very dirty assignment
window.onclick=E.modify();
//here click occurs
obj.test();
})()
(function(){var A=«a»;var C={test:function(){var E=«b»;var D=window[«eval»](function(){alert(A+E)}); D()}};var B={modify:function(){var D=«e»;var E=(function(){_NEW_TOPLONGNAME=«x»}); E()}}; C.test(); window.onclick=B.modify(); C.test()})();
YUICompressor — улучшаем сжатие