作用域和内存问题
程序员文章站
2022-04-16 22:06:31
...
1. 在函数内部重写obj, 这个变量引用的就是一个局部对象,这个obj会在函数执行后立即销毁
function setName(obj) {
obj.name = 'LC'
obj = new Object();
obj.name = "CC"
}
var person = new Object();
setName(person);
person.name //LC
2.执行环境和作用域
2.1执行环境
每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中,函数执行之后,栈将环境弹出,控制权返回之前的环境
2.2作用域
函数在执行环境中,会创造一个作用域链。作用域链的前端始终都是当前执行的代码所在的环境的变量对象,下一个变量对象就是外一层的执行环境,所以作用域最后一个对象就是全局执行环境的变量对象。
3.延长作用域链
对于with语句来说,会将指定的对象添加到作用域的前面。也就是说,如果在局部环境中,使用with语句,对象会添加到局部环境中;如果在全局环境中,使用with语句,对象会添加到全局环境中。
with 语句是运行缓慢的代码块,尤其是在已设置了属性值时。大多数情况下,如果可能,最好避免使用它。
function bindurl() {
var qs = 'aa'
with(location){
var url = href + qs
}
return url
}
下一篇: JS学习3(变量、作用域和内存)