2016-09-08 7 views
-1

как вернуть переменную из функции и присвоить ее объекту как свойству? Я написал этот код, но он говорит, что свойство объекта не определеновозвращает переменную из функции javascript

var ahoy = (function yes() { 
    var mp = {}; 

    function oh() { 
     var greeting = "hello"; 
     var advoir = "goodbye"; 
    } 
    return { 
     greeting: greeting, 
     advoir: advoir 
    }; 
    oh(); 
    mp.greeting = greeting; 
    mp.advoir = advoir; 
    console.log(mp.greeting); 
    console.log(mp.advoir); 
}); 
ahoy(); 
+0

'' greeting' и advoir' определены в функции 'oh' - так не "видны", где вы пытаетесь вернуть их –

+0

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

ответ

0

Ошибка здесь возникает из-за того, что функция ahoy не имеет доступа к переменным в sc ope oh.

function oh() { 
    var greeting = "hello"; 
    var advoir = "goodbye"; 

    console.log(greeting); // "hello" 
} 

oh(); 
console.log(greeting); // undefined 

greeting является локальным для сферы oh, поскольку он объявлен внутри oh, и, таким образом, не доступен за пределами этой функции. Вместо этого, это будет работать:

var greeting; 
console.log(greeting); // undefined 

function oh() { 
    greeting = "hello"; 
    console.log(greeting); // "hello" 
} 

console.log(greeting); // undefined 
oh(); 
console.log(greeting); // "hello" 
+0

Спасибо, что работает: D –

0

инструкция по возврату возврата на дно. определить приветствие вне функции ой (определяют с вар ммк)

0

я вижу несколько проблем в коде: -

  1. Вы назначаете «привет» приветствие и «до свидания», чтобы advoir в функции ах() и вернуться за пределы этой функции.
  2. Теперь скажите, даже если вы вернете возвращение внутри функции oh(), ваше приветствие и advoir будут возвращены, но вы не будете захватывать вывод, и, таким образом, приветствие показывается неопределенным.

Вы можете попробовать следующее: -

var ahoy = (function yes() { 

    function oh() { 
     var mp={ 
      greeting:'greeting', 
      advoir:'advoir' 
     } 
     return mp; 
    } 

    mp=oh(); 
    var greeting = mp.greeting; 
    var advoir = mp.advoir; 
    console.log(mp.greeting); 
    console.log(mp.advoir); 
}); 
ahoy(); 

Jsfiddle link

0

Вместо выполнения функции, вы можете просто определить переменные и возвращает объект сразу

var ahoy = (function yes() { 
    return { 
     greeting: "hello", 
     advoir: "goodbye" 
    }; 
}); 
ahoy(); 
console.log(ahoy()); 
0

Попробуйте

var ahoy = (function yes() { 
    var mp = {}; 

    // declare the variable outside of function oh 
    var greeting, advoir; 

    function oh() { 
    greeting = "hello"; 
    advoir = "goodbye"; 
    } 

    oh(); 
    mp.greeting = greeting; 
    mp.advoir = advoir; 
    console.log(mp.greeting); 
    console.log(mp.advoir); 

    // move return statement to end of function 
    return { 
    greeting: greeting, 
    advoir: advoir 
    };  
}); 

ahoy(); 
Смежные вопросы