关于作用域链
当代码在一个执行环境中执行时,会创建变量对象的一个作用域链。
var color="blue";
function changeColor(){
if (color === "blue"){
color="red";
}else {color = "blue";}
}
changeColor();
alter(color);
这个例子里面,函数changeColor的作用域链包含两个对象:自己的变量对象 和全局环境的变量对象。
我想问到底是作用域包含变量对象还是变量对象里面有作用域呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
其实这种变量的问题,是js的不好的地方,很不小心就赋值到全局变量了,最近的es6,解决了这个问题。也就是用let来声明变量,你可以了解一下,看他解决了什么问题,就知道现在变量声明的问题。
首先,这两者不是包含关系。。
作用域是一个范围。你上面那段代码,color是在全局作用域下定义的,所以在任何地方(包括在changeColor函数中)都能得到color的值。但如果你在changeColor函数内部使用var定义color,在函数外面是得不到color的值的(或者说得到的是undefined)。
在函数内部定义的变量,只能在函数内部得到它的值,这个范围,就是作用域。
慢慢来,看不懂就先放下看看其他的。我第一次看的时候也不懂。