需要帮助才能理解这个立即调用的函数示例

时间:2014-05-19 16:43:48

标签: javascript javascript-objects iife module-pattern

这是我从教程中找到的代码片段,但我无法理解它的目的。这是一个例子:

app.js

var oojs = (function(oojs){



    return oojs;

}(oojs || {}));

第一部分我很困惑,为什么用与参数相同的参数调用它? 第二个疑问是为什么如果没有“oojs”应该用对象文字作为参数调用函数?这有必要吗?
最后为什么它应该返回与它的函数名称(oojs)相同。


也许这是创建对象的一种方式,但如果有人能帮我满足这个需求,我将非常感激。

1 个答案:

答案 0 :(得分:0)

这只是JavaScript中的范围规则。每当创建新函数时,都会创建一个新的变量范围。参数名称oojs确实与外部参数oojs具有相同的标识符,但它更本地化。

这是一个简化的例子

function foo(x){
    console.log(x + 2); 
}
var x = 3; // this is a different x, it belongs to the outer scope, and not the function
foo(x); // logs 5, since x is passed to the function, then x + 2 is logged

在这个代码示例中,我们的想法是只更改oojs(如果它不存在),然后将其设置为紧接调用的函数表达式的返回值。它与作曲module pattern相似。就个人而言,当涉及到许多行时,我发现语法相当混乱。