JavaScript中没有块级作用域,这意为着在块语句中定义的变量,实际上是包含在函数中而非语句中创建的。
下面的这个实例可以看出:
function outputNumbers(count){ for (var i=0; i < count; i++){ alert(i); } alert(i); //count } outputNumbers(5);//0 1 2 3 4 5(for块语句外输出的)虽然没有块级作用域,但是可以通过匿名函数来模仿块级作用域
用作块级作用域(通常称为私有作用域)的匿名函数语法如下表示:
(function(){ //这里是块级作用域 })();以上代码定义并立即调用了一个匿名函数。将函数申明包含在一对圆括号中,表示它实际上是一个函数表达式。
注意,下面这种写法会出错
//错误写法 function(){ //这里是块级作用域 }();如果一条语句是以function关键字开始,那么这段会被JavaScript解析器认为是函数定义。而函数定义是不能被立即执行的,因此就必须有一个办法,使解析器可以将之识别为函数表达式。因为解析器识别函数定义的条件是以function关键字开始,那么只要在function关键字的前面有任何其他的元素,就会从函数定义转变为函数表达式,所以当我们在其前面填括号就会变成函数表达式了。
下面这种写法也可以:
(function(){ //这里是块级作用域 }());现在让我们重新写开头的那个实例:
function outputNumbers(count){ (function () { for (var i=0; i < count; i++){ alert(i); } })(); alert(i); //ReferenceError: i is not defined,出现错误了 outputNumbers(5);//0 1 2 3 4总结:无论在什么地方,只要临时需要使用变量,就可以使用私有作用域,通过创建私有作用域,每个人都可以使用自己的变量,又不用担心污染全局作用域。
转载于:https://www.cnblogs.com/YeChing/p/6361497.html
