首页 > 关于作用域链

关于作用域链

当代码在一个执行环境中执行时,会创建变量对象的一个作用域链。

var color="blue";
function changeColor(){

 if (color === "blue"){
     color="red";
    }else {color = "blue";}

}

changeColor();
alter(color);

这个例子里面,函数changeColor的作用域链包含两个对象:自己的变量对象 和全局环境的变量对象。

我想问到底是作用域包含变量对象还是变量对象里面有作用域呢?


其实这种变量的问题,是js的不好的地方,很不小心就赋值到全局变量了,最近的es6,解决了这个问题。也就是用let来声明变量,你可以了解一下,看他解决了什么问题,就知道现在变量声明的问题。


首先,这两者不是包含关系。。

作用域是一个范围。你上面那段代码,color是在全局作用域下定义的,所以在任何地方(包括在changeColor函数中)都能得到color的值。但如果你在changeColor函数内部使用var定义color,在函数外面是得不到color的值的(或者说得到的是undefined)。

在函数内部定义的变量,只能在函数内部得到它的值,这个范围,就是作用域。

慢慢来,看不懂就先放下看看其他的。我第一次看的时候也不懂。

【热门文章】
【热门文章】