2010-10-13 3 views
3

Приведен следующий код:Пусть функция «возвращает» суперфункцию?

function two() { 
    return "success"; 
} 

function one() { 
    two(); 
    return "fail"; 
} 

Если вы проверить код, вызвав одну функцию(), вы всегда будете получать «глючить».

Вопрос в том, как я могу вернуть «успех» в функции one() только функцией вызова two()?

Возможно ли это?

С уважением

+2

@Paniyar Если он этого не понимает, он этого не понимает. Просто потому, что это просто для вас, это не значит, что это универсально просто. – mattbasta

ответ

6

Вы не можете сделать функцию возврата из функции, которая называется его в JavaScript (или многих других языков, AFAIK). Вам нужна логика в одном() для этого. Например:

function one() { 
    return two() || "fail"; 
} 
+0

Thats plain wrong, "success" || «fail» не удастся, и не будет boolean – smirkingman

+4

Это не так. Согласно правилам JavaScript, как написано Ancients of the Web, оператор or ('||') возвращает первый аргумент, если он не оценивает значение «фальшиво» (например, false, undefined, null, 0 , ""), иначе он будет оценивать и возвращать второй аргумент. – andrewmu

+1

@smirkingman На самом деле, вы ошибаетесь. Строка оценивает истинное булево значение в JS. Удар «успех» || «сбой» на любую консоль JS, и он вернет «успех». Знайте, о чем вы говорите, прежде чем вы получите ответ от кого-то. – mattbasta

2

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

function two() { 
    throw {isReturn : true, returnValue : "success"} 
} 


function one() { 
    try { 
    two() 
    } catch(e) { 
    if(e.isReturn) return e.returnValue; 
    } 
    return "fail"; 
} 

, я считаю.

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