闭包和IIFE之间的差异';javascript中的s
根据闭包概念,它将存储外部词汇环境的变量,以便将来执行其内部函数。例如:闭包和IIFE之间的差异';javascript中的s,javascript,closures,iife,Javascript,Closures,Iife,根据闭包概念,它将存储外部词汇环境的变量,以便将来执行其内部函数。例如: function makeYounger(age) { function b() { console.log("Original age is :" + age); } b(); return(function() { return age / 2; }); } var displayAge = makeYounger(20); consol
function makeYounger(age) {
function b() {
console.log("Original age is :" + age);
}
b();
return(function() {
return age / 2;
});
}
var displayAge = makeYounger(20);
console.log(displayAge());
在上述场景中,age
由Javascript引擎保留,以执行返回方法中的内部函数
人生来了:
(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()
函数。相反,我们使用的是窗口
对象。我很困惑,如果我们有闭包,为什么要使用窗口
javascript中闭包和IIFE的区别
IIFE只是A)在定义它的上下文上创建闭包,以及B)创建创建其他闭包的上下文的一种特定方式
我的问题是,如果javascript引擎已经存储了fNameSpace1对象,那么在这个场景中window对象的确切用途是什么。为什么我们要使用window创建引用 因此它可以在IIFE之外使用,通过
doer
创建的window.doer=…
全局引用它
有几十种不同的方法可以做到这一点。其中一个是这样分配给窗口的。另一种方法是返回值并使用var
语句:
var doer = (function() {
// ...
return fNamespace1;
})();
但是,这里有几十种不同的构造。该特定函数的作者更喜欢在窗口中写入属性,作为创建全局变量的方法。iLife在多个函数访问全局变量时有助于避免全局变量污染
使用局部变量时,闭包函数很有用。ThatfNameSpace1.callName()代码>最后将失败。全局变量称为doer
,而不是fNameSpace1
。不清楚您在问什么。如果问题是“闭包和IIFE之间有什么区别”,答案是“IIFE是创建闭包的一种特定方式。”如果问题是“如果我们有闭包,为什么要使用window?”答案是:因为作者想要一个全局变量。我的问题是,如果javascript引擎已经存储了fNameSpace1对象,那么在这个场景中window对象的确切用途是什么。为什么我们要使用window创建引用?