我遇到了一個自執行函數,它在聲明的包含var存在的條件下執行,如果不存在則傳遞一個對象。條件執行後自動執行函數傳遞對象
實施例:
var myFunc = (function(myFunc){}(myFunc || {}));
爲什麼存在是傳遞對象的「或」條件操作?
我遇到了一個自執行函數,它在聲明的包含var存在的條件下執行,如果不存在則傳遞一個對象。條件執行後自動執行函數傳遞對象
實施例:
var myFunc = (function(myFunc){}(myFunc || {}));
爲什麼存在是傳遞對象的「或」條件操作?
var myFunc = (function(myFunc){}(myFunc||{}));
這沒有任何意義,因爲myFunc的爭論將永遠是{}
- 我通過混淆。
不適解釋一個沒有
第一示例
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
所以在這種情況下,它是未定義所以參數是一個對象,而不是
你提供的代碼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;
}());
擴充功能允許您將模塊拆分爲多個部分。每個部分都可以駐留在它自己的文件中。例如,我們可以增強上述模塊如下:
// file 2
var MODULE = (function (my) {
my.anotherMethod = function() {
// added method...
};
return my;
}(MODULE));
在隆乳術
file 1
的這種模式
但是必須file 2
之前加載,否則你會得到一個錯誤。鬆散擴充允許您以任何順序加載文件。
var MODULE = (function (my) {
// add capabilities...
return my;
}(MODULE || {}));
在上面的例子的模塊MODULE
可被劃分在其上可以以任何順序裝入多個文件。如果它存在,則表達式MODULE || {}
評估爲MODULE
。否則,它評估爲{}
。
因此,對於第一個加載的文件,表達式將評估爲{}
,因爲MODULE
最初將爲undefined
。在隨後的文件中,表達式將評估爲MODULE
。
+1用於明確的增強示例。不過,我想語法'obj || {}'你在最後一句中回答的問題主要受到質疑。 – laika
問題是什麼? – mishik