Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要帮助来理解这个立即调用的函数示例吗_Javascript_Javascript Objects_Iife_Module Pattern - Fatal编程技术网

Javascript 需要帮助来理解这个立即调用的函数示例吗

Javascript 需要帮助来理解这个立即调用的函数示例吗,javascript,javascript-objects,iife,module-pattern,Javascript,Javascript Objects,Iife,Module Pattern,这是我从教程中找到的一段代码,但我不能清楚地理解它的用途。以下是一个例子: app.js var oojs = (function(oojs){ return oojs; }(oojs || {})); 我感到困惑的第一部分是,为什么调用它时使用与其参数相同的参数? 第二个疑问是,如果没有“oojs”,为什么应该使用对象文本作为参数调用函数?这有必要吗 最后,为什么它应该返回与函数名(oojs)相同的值 也许这是一种创建对象的方法,但如果有人能帮我解决这个问题,我会非常感激。

这是我从教程中找到的一段代码,但我不能清楚地理解它的用途。以下是一个例子:

app.js

var oojs = (function(oojs){



    return oojs;

}(oojs || {}));
我感到困惑的第一部分是,为什么调用它时使用与其参数相同的参数?
第二个疑问是,如果没有“oojs”,为什么应该使用对象文本作为参数调用函数?这有必要吗
最后,为什么它应该返回与函数名(oojs)相同的值



也许这是一种创建对象的方法,但如果有人能帮我解决这个问题,我会非常感激。

这只是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
,然后将其设置为立即调用的函数表达式的返回值。它类似于作曲。就我个人而言,当涉及到很多行时,我发现语法相当混乱。

在使用
var
时,传入与您使用的相同的变量名本质上是一种故障保护。您希望
oojs
存在并希望使用它,但如果它不存在,您就避免使用
oojs
生成全局变量。例如,如果您假设
oojs
在作用域中可用,并使用
oojs=(function(){})(
),并且之前没有定义它,那么您将创建一个全局变量(假设不是在严格模式下)。谢谢,这非常有帮助@Cœur你更正了“inmediately”,但无法将“invote”改为“invocated”?@Cœur哦,对了,只有那些有几枚徽章的人才能看到…