2016-11-02 3 views
0

многолетнего новичка вопрос: как я могу исправить это «не функцию» ошибка:Javascript рекурсия внутри функции экспорта: не функция

exports.height = (input) => { 
    function height(node, height) { 
     if (node.left) { 
      if (height > maxHeight) { 
       maxHeight = height; 
      } 
      **height(node.left, height+1); // <-- Says "Not a function"** 
     } 
    } 

    var maxHeight = 0; 
    height(input, 0); // <--- This works fine. 

    return maxHeight; 
} 

говорит, TypeError: высота не является функция

at height (BinarySearchTree.js:53:5) 

Спасибо! Nilesh

+0

просто изменить что exports.height, он должен работать – Geeky

+0

Вы назвали свой параметр так же, как функции. Вы пытались отладить с помощью 'console.log (height)'? –

+0

@Geeky: 'export.height' ссылается на другую функцию. В этом коде слишком много вещей, названных 'height'. –

ответ

0

Проблемы вы слежка переменной функции с именем height с аргументом одного и то же имя:

function height(node, height) { 

Поскольку функции JavaScript являются гражданами первого класса, в контексте height тела функции, есть теперь является локальной переменной с именем height, которая не совпадает с функцией.

Рассмотрим изменение имени одного из них, например, так:

function height(node, h) { 
    if (node.left) { 
     if (h > maxHeight) { 
      maxHeight = h; 
     } 
     height(node.left, h+1); 
    } 
} 
1

Вы случайно слежка ваш height переменная

function height(node, height) { 
    if (node.left) { 
     if (height > maxHeight) { 
      maxHeight = height; 
     } 
     height(node.left, height+1); 
    } 
} 

var maxHeight = 0; 
height(input, 0); // 0 is obviously not a function ^_^

Попробуйте переименовать параметр к чему-то height как h

function height(node, h) { 
    if (node.left) { 
     if (h > maxHeight) { 
      maxHeight = h; 
     } 
     return height(node.left, h+1); // don't forget your return 
    } 
} 

var maxHeight = 0; 
height(input, 0);

Все, что сказал, вы можете захотеть пересмотреть ваши функции ALLtogether

function height (node) { 
    if (node === undefined) 
    return -1; 
    else 
    return Math.max(height(node.left), height(node.right)) + 1; 
} 
Смежные вопросы