关于此Javascript代码构造

时间:2014-07-22 04:17:39

标签: javascript

我目前正在调试一些代码,但我无法在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设计模式,但我不知道它是什么

1 个答案:

答案 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在闭包内未定义。