code execution cycle
push function calls pop on return
function init() {
var o1 = new Model(1);
var o2 = new Model(2);
}
function Model(nr) {
this.nr = nr;
}
init();
function init() {
var o1 = new Model(1);
var o2 = new Model(2);
}
function Model(nr) {
this.nr = nr;
}
init();
main(); // global
function init() {
var o1 = new Model(1);
var o2 = new Model(2);
}
function Model(nr) {
this.nr = nr;
}
init();
main(); // global
function init() {
var o1 = new Model(1);
var o2 = new Model(2);
}
function Model(nr) {
this.nr = nr;
}
init();
main(); // global
function init() {
var o1 = new Model(1);
var o2 = new Model(2);
}
function Model(nr) {
this.nr = nr;
}
init();
main(); // global
init();
function init() {
var o1 = new Model(1);
var o2 = new Model(2);
}
function Model(nr) {
this.nr = nr;
}
init();
main(); // global
init();
new Model(1);
function init() {
var o1 = new Model(1);
var o2 = new Model(2);
}
function Model(nr) {
this.nr = nr;
}
init();
main(); // global
init();
function init() {
var o1 = new Model(1);
var o2 = new Model(2);
}
function Model(nr) {
this.nr = nr;
}
init();
main(); // global
init();
new Model(2);
function init() {
var o1 = new Model(1);
var o2 = new Model(2);
}
function Model(nr) {
this.nr = nr;
}
init();
main(); // global
init();
function init() {
var o1 = new Model(1);
var o2 = new Model(2);
}
function Model(nr) {
this.nr = nr;
}
init();
main(); // global
function init() {
var o1 = new Model(1);
var o2 = new Model(2);
}
function Model(nr) {
this.nr = nr;
}
init();
...
function init() {
init();
}
init();
main(); // global
function init() {
init();
}
init();
main(); // global
init();
function init() {
init();
}
init();
main(); // global
init();
init();
function init() {
init();
}
init();
main(); // global
init();
init();
init();
function init() {
init();
}
init();
main(); // global
init();
init();
init(); . . . . . init();
stack overflow
IE 9/10 ~ 20.000 Chrome ~ 25.000
function init() {
var o1 = new Model(1);
var o2 = new Model(2);
}
function Model(nr) {
if ( nr > 1 ) {
throw new Error();
}
this.nr = nr;
}
init();
main(); // global
init();
new Model(2);
Uncaught Error();
function init() {
setTimeout(cb, 1000);
log("init");
}
function cb() {
log("callback");
}
init();
main(); // global
function init() {
setTimeout(cb, 1000);
log("init");
}
function cb() {
log("callback");
}
init();
main(); // global
init();
function init() {
setTimeout(cb, 1000);
log("init");
}
function cb() {
log("callback");
}
init();
main(); // global
init();
setTimeout();
function init() {
setTimeout(cb, 1000);
log("init");
}
function cb() {
log("callback");
}
init();
main(); // global
init();
log("init");
function init() {
setTimeout(cb, 1000);
log("init");
}
function cb() {
log("callback");
}
init();
main(); // global
init();
function init() {
setTimeout(cb, 1000);
log("init");
}
function cb() {
log("callback");
}
init();
main(); // global
function init() {
setTimeout(cb, 1000);
log("init");
}
function cb() {
log("callback");
}
init();
function init() {
setTimeout(cb, 1000);
log("init");
}
function cb() {
log("callback");
}
init();
cb();
function init() {
setTimeout(cb, 1000);
log("init");
}
function cb() {
log("callback");
}
init();
cb();
log("callback");
about setTimeout:
""
window.setTimeout();
BOM
DOM
XHR
setTimeout();
onclick();
$.get();
cbTimeout();
cbGet();
while the stack executes
each function executes its entire body
before it returns