欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

作用域和内存问题

程序员文章站 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
}