根据Closures概念,它将存储外部词汇环境的变量,以便将来执行其内部函数。例如 -
function makeYounger(age){
function b(){
console.log("Original age is :"+age);
}
b();
return( function (){
return age/2; }
);
}
var displayAge = makeYounger(20);
console.log(displayAge());
在上面的场景中,javascript引擎保留了age变量来执行return方法中存在的内部函数。
这是IIFE,
(function(window){
var greeting = "Hello";
var fNameSpace1 ={
name : "Appu",
callName : function (){
console.log(greeting + fNameSpace1.name);
}
};
window.doer = fNameSpace1;
}) (window);
fNameSpace1.callName();//To execute the inner function
在上述场景中,根据闭包概念,变量' greeting'和' fNameSpace1.name'将被存储以便将来执行callname()函数。相反,我们正在使用' window'宾语。如果我们有封闭,我很困惑为什么我们要使用窗口?
答案 0 :(得分:0)
javascript中闭包与IIFE的区别
IIFE只是A的一种特定方式.A)在定义它的上下文上创建一个闭包,B)创建一个创建其他闭包的上下文。
我的问题是,如果javascript引擎已经存储了fNameSpace1对象,那么在这种情况下窗口对象的确切用法是什么。为什么我们使用窗口创建引用?
所以它可以在IIFE之外使用,通过doer
创建的window.doer = ...
全局来引用它。
有许多不同的方法可以做到这一点。其中一个是通过分配给window
这样做的。另一个是通过返回值并使用var
语句来完成的:
var doer = (function() {
// ...
return fNamespace1;
})();
但同样,有许多不同的形式。该特定作者的作者更喜欢写window
上的属性作为创建全局的方式。
答案 1 :(得分:0)
IIFE对于在多个函数访问全局变量时避免全局变量污染很有用
使用局部变量时,关闭函数很有用。