在java,c等高级语言中都有块级作用域的概念,如:在if,for等语句内定义的变量,在语句之外是不能访问的。而在js中就没有这个概念,如以下代码:
function test(){
for(var i=0;i<5;i++){
alert(i); // 0 1 2 3 4
}
alert(i) // 5
}
test();
for循环外面的alert(i)是可以正常执行的,在js中if,for等语句是没有自己单独的块级作用的,变量i的作用域就是test方法,这跟java,c等高级语言是不同的。
在js中实现块级作用域:
(function(){
alert('我自动执行了');
})(); // js中()表示执行
function test(){
(function(){ // 小括号内的匿名函数属于单独的作用域
for(var i=0;i<5;i++){
alert(i);
}
})();
alert(i); // 不能执行
}
test();
()中的function可以定义方法名,也可以不定义方法名,括号内就是一个可以被执行的整体,而且有自己单独的作用域。
代码后面加上();表示自动执行某段代码。