对Javascript的范围和块级别的概念性理解
在任何编程语言中,动作的范围总是最优先的,因为它控制变量和参数的可见性和生命周期。什么是块级范围
在一组语句中属于一个块的一对括号({和}),在此定义的所有变量在代码块中都不可见,我们称为块级范围。
职能范围是很容易理解的(* ^ __ ^ *),在功能参数和变量的定义是不可见的外部功能。
大多数C类语言都有块级范围,但js没有。请看下面的演示:
语言
#包括
主()
{
int = i 2;
我--;
如果(i)
{
int = 3;
}
printf(%d /
}
如果你运行这个程序,会使用一个未定义的变量j.as错误:你可以看到,C语言有一个块级范围,因为是在陈述,如果块中定义的,所以它是不可访问的外块。
js如何运行,并查看另一个演示:
功能测试(){
对于(var i = 0;i < 3;i + +){
}
警报(一);
}
测试();
运行此代码时,弹出3,也就是说,js不支持块级作用域,它只支持函数作用域,函数中任何位置定义的变量在函数中处处可见。
那么我们如何为JS建立块级范围呢你还记得函数中定义的变量吗如果这个函数完成,变量将被销毁。我们可以使用这个属性来模拟JS的块级范围吗请看下面的演示:
函数测试(){
(函数(){())
对于(var i = 0;i < 4;i + +){
}
});
警报(一);
}
测试();
当再次运行时,会弹出i未定义的错误,哈哈,在这里,我们把for块变成一个闭包,然后调用这个函数,当函数调用完成时,变量i自动销毁,因此,我们不能访问块。
是JS最重要的封闭性质(特征(* ^ __ ^ *)我们理解),JS,为了避免命名冲突,我们应该尽量避免使用全局变量和全局函数尽可能。那么,你如何避免呢是的,如演示所示,我们可以把所有的内容放在一个里面。
(函数(){())
内容
});
在这种情况下,我们必须在这个时候向它们的外层添加一个功能范围吗超出范围的程序无法访问它们。