【发布时间】:2018-11-29 03:31:54
【问题描述】:
在关于立即调用函数表达式(关于提供的代码 sn-p)的 Udacity 课程中,它说:
返回的函数关闭(即捕获) 嗨变量。这允许 myFunction 维护一个私有的、可变的 函数外无法访问的状态!更重要的是: 因为表达的函数被立即调用,IIFE 换行 很好地整理代码,这样我们就不会污染全局范围。
我正在努力理解立即调用匿名函数与防止变量 hi“污染全局范围”有什么关系,并且由于 hi 已经在函数中定义,是不是已经在本地/私人范围内?
const myFunction = (
function () {
const hi = 'Hi!';
return function () {
console.log(hi);
}
}
)();
【问题讨论】:
-
关键是要避免让
hi可以从全局范围访问,并创建另一个不能与之冲突的名称。 -
如果你不立即调用它,你必须给它一个名字,污染外部范围。
-
基本上是
myFunction = function () { console.log(hi) },因为它是 iife 的结果,但如果您不使用 iife,则必须在外部范围内声明hi。如果您在最高范围内执行此操作,最终会导致hi在您的window对象或global对象中(取决于您所拥有的),从而污染它。 -
只要变量在块(let 或 const 的情况下)或函数(car 的情况下)内,就不会污染全局范围
标签: javascript scope iife revealing-module-pattern