以下JS结构的目的是什么?

时间:2010-06-21 04:40:14

标签: javascript

  

可能重复:
  JavaScript: Why the anonymous function wrapper?

有时我在JS程序中看到这样的结构:

(function() {
 // blah blah
})();

任何想法是什么,它的副作用和好处是什么?

3 个答案:

答案 0 :(得分:9)

创建新范围(以避免污染父范围)。令人惊讶的是(对于熟悉类C语言的初学者),当您单独使用大括号时,JavaScript不会创建新范围:

{
  var a = "foo";
}
// a still == "foo".

(function() {
  var b = "bar";
})();
// b doesn't exist.

但是,函数始终会创建一个新范围。由于JavaScript的闭包,来自父作用域的现有变量会自动带入(关闭)到匿名函数中。因此,在其他地方使用匿名函数的情况下(例如问题中)(因为它从未被分配),它基本上就像一个C风格的大括号。

答案 1 :(得分:3)

与许多其他花括号分隔的语言不同,JavaScript不会将变量范围限定到最近的封闭块。相反,var语句将变量范围扩展到封闭函数。 JavaScript程序员的一个常见错误是在循环或条件内声明var,并假设它们在块结束时超出范围。

创建一个匿名函数,然后立即执行它(通过在其后面放置())会导致创建一个新的范围,确保在wil中声明的变量不会干扰可能存在的其他JavaScript。将整个事物包装在另一组parens中使它成为一个表达式,它可以解决一些语法歧义,以实现最大的浏览器兼容性。

答案 2 :(得分:2)

它可以防止污染全局命名空间。也就是说,标识符不会泄漏到页面/代码/脚本的其余部分。