无块级作用域及如何模拟块级作用域
javascript是没有块级作用域的,如下可验证:
if
(
true
){
var
name =
"xiaofei"
;
}
console.log(name);
//xiaofei
for
(
var
i = 0; i < 10; i++){
//do something
}
console.log(i);
//10
|
那如何模拟块级作用域呢?可以利用匿名函数来模拟块级作用域
(
function
(){
//此处定义的变量会在运行结束后被销毁
})();
//看一个例子:
function
fun(n){
(
function
(){
for
(
var
i = 0; i < n; i++){
//do something
}
})();
console.log(i);
//无法访问 发生错误
}
|
解释:fun函数内部的匿名函数运行完毕后内部的变量立即被销毁了,所以在匿名函数外边访问不到i
还要注意的是在fun函数内部创建了一个匿名函数实质是创建了一个闭包,但是这个闭包没有付给其他变量,就没有存在引用,
所以在它执行完后立即被销毁