Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';以下JS结构的目的是什么?_Javascript - Fatal编程技术网

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。将整个内容包装在另一组参数中,使其成为一个表达式,可以解决一些语法歧义,以实现最大的浏览器兼容性

最近的类似问题: