Javascript 什么';以下JS结构的目的是什么?
可能重复:Javascript 什么';以下JS结构的目的是什么?,javascript,Javascript,可能重复: 有时我会在JS程序中看到这样的结构: (function() { // blah blah })(); 你知道这是怎么回事吗?它的副作用和好处是什么?这是为了创建一个新的范围(避免污染父范围)。令人惊讶的是(对于熟悉类似C语言的初学者来说),当您单独使用大括号时,JavaScript并没有创建新的作用域: { var a = "foo"; } // a still == "foo". (function() { var b = "bar"; })(); // b do
有时我会在JS程序中看到这样的结构:
(function() {
// blah blah
})();
你知道这是怎么回事吗?它的副作用和好处是什么?这是为了创建一个新的范围(避免污染父范围)。令人惊讶的是(对于熟悉类似C语言的初学者来说),当您单独使用大括号时,JavaScript并没有创建新的作用域:
{
var a = "foo";
}
// a still == "foo".
(function() {
var b = "bar";
})();
// b doesn't exist.
但是,函数总是创建一个新的作用域。由于JavaScript的闭包,父作用域中的现有变量会自动(关闭)到匿名函数中。因此,在匿名函数不在其他地方使用的情况下(如问题中),它基本上就像一个C样式的大括号。它防止了对全局名称空间的污染。也就是说,标识符不会泄漏到页面/代码/脚本的其余部分。与许多其他大括号分隔的语言不同,JavaScript不会将变量范围限定到最近的封闭块。相反,
var
语句将变量范围扩展到封闭函数。JavaScript程序员的一个常见错误是在循环或条件中声明var
s,并假设它们在块结束时将超出范围
创建一个匿名函数,然后立即执行它(通过将()
放在它后面)会导致创建一个新的作用域,从而确保在该函数中声明的变量不会干扰可能挂起的其他JavaScript。将整个内容包装在另一组参数中,使其成为一个表达式,可以解决一些语法歧义,以实现最大的浏览器兼容性 最近的类似问题: