1.全局作用域
var global = "global";
for(var i = 0; i <8; i++) {
var a = 10;
}
console.log(global); //global
console.log(i); //8
console.log(a); //10
扫一眼感觉没什么就是这个答案呀,可是你是否还记得但年大年湖畔的c和c++么?想起来了吧!javascript是没有块级作用域的,因此对于js来说变量i和a都是全局变量,所以皆可以输出i和a的值。
那么,js里没有办法块级作用域,使变量成为局部变量么,答案当然是肯定的啦!
方法1.使用立即函数
(function(){
var part = "part";
})();
方法2.避免预编译
!function() {
var a = 90;
}();
+function() {
var a = 80;
}();
2.函数作用域
function func() {
var b = 0;
}
console.log(b); //b is not defined
函数作用域,只在函数内部有效。
好,那再来一个
function func() {
num = 12;
}
alert(num); //12
由于没有用var声明变量,会默认为是全局变量,因此可以访问到。
最后,再来说一下作用域链
var color = "red";
function getColor() {
return color;
}
alert(getColor()); //red
当调用getColor()时,返回变量color,首先会搜索getColor()变量的对象,若没有就去搜索getColor()上一级是否有color变量,就这样一级一级向上找(到全局变量停止)直到找到最近的color变量返回其值,这形成了一条作用域链。下图展示搜索过程: