作用域和内存问题

本文探讨了JavaScript中函数的执行环境与作用域的概念,包括局部对象的生命周期及其对函数内部变量的影响,并讨论了with语句如何改变作用域链及其实现方式。

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
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值