在Udacity的一堂关于立即调用函数表达式的课程中(涉及到提供的代码片段),它说:
被返回的函数闭包了(即捕获)hi变量。这使得myFunction能够维护一个私有的、可变的状态,该状态无法在函数外部访问!更重要的是:由于立即调用的函数表达式被调用,IIFE很好地封装了代码,以便我们不会污染全局作用域。
我很难理解为什么立即调用匿名函数与防止变量hi“污染全局作用域”有关,而且既然hi已经在函数中定义,那它不就已经在本地/私有范围内了吗?
被返回的函数闭包了(即捕获)hi变量。这使得myFunction能够维护一个私有的、可变的状态,该状态无法在函数外部访问!更重要的是:由于立即调用的函数表达式被调用,IIFE很好地封装了代码,以便我们不会污染全局作用域。
我很难理解为什么立即调用匿名函数与防止变量hi“污染全局作用域”有关,而且既然hi已经在函数中定义,那它不就已经在本地/私有范围内了吗?
const myFunction = (
function () {
const hi = 'Hi!';
return function () {
console.log(hi);
}
}
)();
hi
在全局范围内可访问,并创建另一个不会与之冲突的名称。 - Patrick RobertsmyFunction = function () { console.log(hi) }
是IIFE的结果,但如果您不使用IIFE,则必须在外部作用域中声明hi
。 如果您在最高作用域中执行此操作,则最终将在您的window
对象或global
对象(取决于您有什么)中具有hi
,从而会污染它。 - apokryfos