2013-07-13 2 views
2

Я столкнулся с функцией самоиспускания, которая выполняется при условии, что объявленный содержащий var существует, а если он не существует, ему передается объект.Функция самообучения, передающая объект после условия

Пример:

var myFunc = (function(myFunc){}(myFunc || {})); 

Каким образом есть «или» состояние оператора, который передает объект?

+0

В чем вопрос? – mishik

ответ

0
var myFunc = (function(myFunc){}(myFunc||{})); 

Это не имеет никакого смысла, потому что аргумент MyFunc всегда будет {} - я смущен этим.

Ill объяснить то, что делает

Первый пример

var cool = { 
    person: 'john' 
}; 

(function(Argument){ 
    console.log(Argument); // Result Object {person: "john"} 
}(cool || {})); 

В этом примере прохлады определена и является объектом, так что не пойдет мимо ||


Следующий пример ле

var cool; 
(function(Argument){ 
    console.log(Argument); // Result Object {} 
}(cool || {})); 

В этом примере прохлады определяется Но значение Defualt для переменной undefined поэтому в данном случае это не определено так Аргументом является Object вместо

6

Код Предоставлена пример module pattern. В частности, это пример loose augmentation шаблона модуля.

Шаблон модуля в основном просто immediately invoked function expression (IIFE), который возвращает объект. Например:

// file 1 

var MODULE = (function() { 
    var my = {}, privateVariable = 1; 

    function privateMethod() { 
     // ... 
    } 

    my.moduleProperty = 1; 

    my.moduleMethod = function() { 
     // ... 
    }; 

    return my; 
}()); 

Augmentation позволяет разделить модуль на части. Каждая часть может находиться в собственном файле. Например, мы можем дополнить вышеуказанный модуль следующим образом:

// file 2 

var MODULE = (function (my) { 
    my.anotherMethod = function() { 
     // added method... 
    }; 

    return my; 
}(MODULE)); 

Однако в этой модели увеличения file 1 должны быть загружены до file 2, иначе вы получите сообщение об ошибке. Loose augmentation позволяет загружать файлы в любом порядке.

var MODULE = (function (my) { 
    // add capabilities... 

    return my; 
}(MODULE || {})); 

В приведенном выше примере модуль MODULE может быть разделен на несколько файлов, которые могут быть загружены в любом порядке. Выражение MODULE || {} оценивается как MODULE, если оно существует. В противном случае он оценивается до {}.

Следовательно, для первого загруженного файла выражение будет оцениваться как {}, потому что MODULE изначально будет undefined. В последующих файлах выражение будет оцениваться как MODULE.

+0

+1 для примера с четким дополнением.Однако я предполагаю, что синтаксис 'obj || {} ', о котором вы ответили в последнем предложении, был в основном поставлен под сомнение. – laika

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