2016-05-10 3 views
0

У меня есть JS код, как:Uncaught TypeError: areFieldsSet не является функцией

$(function() { //line-1 
    if(window.location.search.length >1){ 
    //doSomething ; 
    areFieldsSet(); //call this function 
    } //end of if 

    var areFieldsSet = function(){ 
    //do something 
    } 
    //do many things 
    } // end of line-1 function 

Теперь, я получаю сообщение об ошибке, когда я пытаюсь передать функцию areFieldsSet, как описано в названии вопроса. Где я иду не так?

+0

Какая у вас ошибка? и почему вы просто не пытаетесь сделать: 'function areFieldsSet() {...}'? – Alex

+0

@Alex Uncaught TypeError: areFieldsSet не является функцией –

+0

@Alex Функция can not use isFieldsSet() {...}, потому что эта функция ссылается на многие области кода, и я просто не могу объявить это в условии if. –

ответ

2

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

JavaScript делает что-то под названием «подъем». Посмотрите на эту статью: Variable and Function Hoisting in JavaScript

правила иногда может быть запутанным, но в основном функционируют определения с помощью function x() обозначения неявно перемещается к вершине, и переменные определения перемещаются, а также, но не их инициализации!

Например, var x = 5; где-то дальше вниз будет работать, как если бы var x; был написан в начале вашего кода/функции, но x = 5; дальше. Таким образом, x будет определено до назначения, но со значением undefined.

Итак, у вас есть два варианта: либо вы перемещаете areFieldsSet функции над тем местом, где вы называете его, или изменить его от var areFieldsSet = function() только function areFieldsSet() что сделает его право работать Подъемно (а не только переменные Подъемно).

1

Код Javascript работает в 2 этапах.

Первая фаза - объявляет все переменные с ключевым словом var (только объявляет, а не инициализирует) и все объявления функций (функция F() {}).

Вторая фаза - она ​​начинает бежать.

В коде у вас есть выражение функцию, а не декларации, поэтому, когда вы пытаетесь вызвать эту функцию в строке

$(function() { //line-1 
    if(window.location.search.length >1){ 
    //doSomething ; 
    areFieldsSet(); //call this function 
    } //end of if 

    var areFieldsSet = function(){ 
    //do something 
    } 
    //do many things 
    } 

Движок JavaScript знает, что есть переменная с именем areFieldsSet (потому что он объявлен в первой фазе), но assinging ей функции будет работать только тогда, когда ваш код будет достичь к

var areFieldsSet = function(){ 
     //do something 
     } 

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

 Смежные вопросы

  • Нет связанных вопросов^_^