我目前正在调试一些代码,但我无法在javascript中了解这个概念。
I have this code construct.
if(!COMPANY)
COMPANY = {};
COMPANY.Billing = (function(COMPANY){
//More code
})(COMPANY);
据我所知,它会创建一个名为" COMPANY"然后添加一个名为" Billing" 但是我不明白传递同样的#34; COMPANY"进入函数的论证和 同时将其重命名为" COMPANY"再次。我的意思是上面的代码之间有什么区别 以及下面的代码。
COMPANY.Billing = (function(COMPANY){
//More code
})();
我的javascript不是那么深,所以我想了解上面的代码构造意味着什么。这可能是一些javascript设计模式,但我不知道它是什么
答案 0 :(得分:1)
它不是重命名COMPANY
;它正在使用它。代码的注释版本:
if(!COMPANY) // if COMPANY doesn't exist...
COMPANY = {}; // initialize it to a blank object
COMPANY.Billing = // initialize a property
(function(COMPANY){ // this defines a function
//More code
})(COMPANY); // this executes the function with COMPANY as the parameter
// COMPANY.Billing now contains the result of executing the anonymous function
这称为闭包。示例:
foo = (function(x) {
return ++x;
})(4);
这定义了一个函数,然后使用参数x = 4
执行。因此,它返回++x
,即5。因此,foo
被赋值为5.
执行此操作时:
COMPANY.Billing = (function(COMPANY){
//More code
})();
您正在定义一个闭包并执行它,但您没有将任何内容作为参数传递。因此,COMPANY
在闭包内未定义。