闭包是指函数内部可以访问到函数外部定义的变量,可以解决作用域链的问题。而匿名自执行函数可以创建一个独立的作用域,避免变量名冲突的问题。例如,以下代码中的闭包可解决变量i的作用域问题:
for (var i = 0; i < 10; i++) { setTimeout((function (i) { return function () { console.log(i); } })(i), 1000); }
而以下代码中的匿名自执行函数避免了变量名num的冲突问题:
(function () { var num = 0; function increment() { num++; console.log('num:', num); } increment(); })();
在以上两个例子中,闭包和匿名自执行函数都起到了函数作用域的作用。