Каков порядок выполнения кода в JavaScript?

как именно выполняется код в JavaScript? В каком порядке? Будет ли разница в порядке выполнения, если я объявлю такую функцию:

function render() {
    // Code here
}

вместо этого:

var render = new function(){
    // Same code here
}    

выполняет ли JavaScript функции, определенные в файле сценариев, независимо от того, вызываются ли они обработчиком событий? (например,onload=function()).

и, наконец, если функция определена в другой функции, когда родительская функция вызывается, также называется нижняя функция? например,

function a(){

    function b(){
        // code
    }

    function c(){
        //code
    }

}

Я пытаюсь получить конкретное понимание порядка выполнения в JavaScript.

3 ответов


var render = new function(){
  // same code here
}

на new ключевое слово не создает новую функцию. Он создает новый объект, запустив функцию. Таким образом, это фактически запускает тело метода и возвращает объект вместо этого.

Если спрашивать, когда функции анализируются и добавлен в область, то это конкретная реализация, но все функции поднимаются в верхнюю часть области и обычно анализируются перед выполнением любого кода.

функции выполнена только когда вы называете их, призывая f()


объявление функции поднимается (поэтому его можно вызвать ранее в коде, тогда он определен), оператор функции не является.

выполняет ли JavaScript функции, определенные в файле сценариев, независимо от того, вызываются ли они обработчиком событий?

функция вызывается, когда она вызывается. Либо потому, что что-то theFunction следовал по () (возможно с аргументами) или потому что это стало событием обработчик.

onload="function"

если это JS, то он назначит строку чему-то, ожидающему функцию. Если это HTML, то вам нужно () для вызова функции.

и, наконец, если функция определена в другой функции, когда вызывается родительская функция, также вызывается нижняя функция?

нет. Функция вызывается только тогда, когда она вызывается. Объявление функции внутри другой функции просто ограничивает его сферу применения.


когда вы объявляете функцию, она не выполняется до ее вызова (это верно для тех, которые объявлены в onload и других событиях).

для вложенных функций они не выполняются автоматически при вызове функции верхнего уровня, пока содержащая функция не вызовет их.