2016-11-17 2 views
0

Я смотрел на код для node-etherdream библиотеки и в основном модуле я увидел это:Каков эффект прохождения экспорта в анонимную функцию

(сокращенно):

(function(ns) { 
    /// a bunch of code 

})(exports); 

У меня есть никогда не видел exports, который передается в анонимную функцию, подобную этой, и я не вижу module.exports в любом месте этого кода. Тем не менее, этот файл находится в reuire d как и любой другой модуль.

Может кто-нибудь объяснить это использование exports для меня?

ответ

1

Экспорт - это специальный объект, в который вы можете установить переменные. Итак, в этом примере, когда функция выполняется, этот объект экспортируется.

Если вы хотите экспортировать некоторые переменные вы можете установить его в нс переменной (экспорт) в этом случае, как, что:

(function(ns) { 
/// a bunch of code 
    ns.func1 = function(){} 

    ns.func2 = function(){} 

    ns.age = 20 
})(exports); 

Когда требуется файл из другого файла вы получите доступ к этим переменным func1 , func2 и возраст так:

var o = require('file.js') 
o.func1(); 
o.func2(); 
o.age // => 20 
0

Вы можете посмотреть на ниже Immediately Invoked Function Expression (IIFE) (произноситсяiffy), где exports передается в качестве аргумента функции-х ns ниже.

(function(ns) { 
    /// a bunch of code 

})(exports); 

Когда вы смотрите внутри кода EtherDream объекта становится созданным со всеми методами, необходимых и, наконец, привязанных к ns аргументу, где ns становится передаются как exports и ниже линия эквивалентен exports.EtherDream = EtherDream;

(function(ns) { 
    /// a bunch of code 


    ns.EtherDream = EtherDream; 

})(exports); 

Если вы все еще не понимаете, как работает IIFE и его аргументы, вы можете выполнить снимок образца iife ниже.

(function(ns) { 
 
     console.log(ns); 
 
     
 
})(10); // argument passed as 10 to ns 
 

 

 
// This is same as below global scope method 
 

 
function another(ns) { 
 
    console.log(ns); 
 
} 
 

 
another(10);

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