2016-08-24 3 views
2

Итак, я работаю в node.js (новичок), и я пытаюсь использовать переменные, которые находятся в другом скрипте. Я обнаружил, что иногда переменная возвращается как неопределенная. Например:Почему console.log иногда печатает неопределенные для переменной, которая была экспортирована?

//Doesnt like this 
var peaches = 'Peaches'; 
exports.peaches; 

// Likes 
exports.peaches = 'Peaches' 

Теперь, это я требую этого сценария, я считаю, что если я использую верхний метод, то распечатка «неопределенный», в то время как при использовании второго метода, распечатка «Персики».

Это не повлияло бы на меня слишком сильно (поскольку я мог бы всегда использовать второй метод), однако, когда я пытаюсь экспортировать массив, используя второй метод, он печатает как неопределенный. Но запутанная вещь заключается в том, что это происходит только тогда, когда я пытаюсь импортировать два массива (второй всегда будет давать «undefined», а другой будет работать. Это связано с потоком выполнения программы? (Так что у него есть время, чтобы ? выполнить первый сценарий, но не второй

ответ

4

Попробуйте это:

var peaches = 'Peaches'; 
exports.peaches = peaches; 

в свой первый «метод» вы на самом деле не экспортирует ничего

переменная exports это обычный JavaScript объект. созданный для каждого ваших модулей.

+0

Хорошо, что это работает, однако почему это так? var arr = новый Array(); arr = getArr (тело); export.arr = arr; –

+0

Что такое 'getArr (body)'? – Vad

+0

Его метод, который возвращает массив строк –

0

Как правило, если вы хотите вернуть какой-либо модуль javascript или Object. Вы используете объект module.exports, module.exports - это фактический объект, который возвращается, когда вам требуется этот экспортированный модуль.

Объект exports, который вы используете для экспорта, это сокращенный псевдоним для module.exports.

Теперь, поскольку вы не назначили какой-либо объект вашему объекту exports, он подходит как неопределенный.

Думайте об этом так.

object = { 
    key1:'value1', 
    key2:'value2' 
} 
console.log(object[key1]) // value1 
console.log(object[key2]) // value2 
//Now, if you try to access something that is not assigned 
console.log(object[key3]) // undefined 

То же самое происходит с экспорта объекта, Вы не назначили ничего exports.peaches, когда вы делаете.

exports.peaches //hence undefined while import 

Вместо этого сделать

exports.peaches = 'peaches' 

Я надеюсь, что имеет смысл !.

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