首页 新闻 搜索 专区 学院

javascript中的with问题

2
悬赏园豆:5 [已解决问题] 解决于 2012-09-05 19:19
with(location)
    {
        var url=href+"aaa";    
    }
alert(url);

为什么外部可以访问url,不是执行到with语句创建临时作用域(变量对象)然后执行完毕对象销毁,那么这个变量对象被销毁了,为什么还可以方位ul??请各位大虾能推荐一下关于这方面的文章!谢谢

unbreakable的主页 unbreakable | 初学一级 | 园豆:111
提问于:2012-09-03 07:50
< >
分享
最佳答案
0

with不是function,它不会引入新的变量作用域,所以这里的url外面会访问到。

JavaScript没有块级作用域,只有函数级作用域,所以像下面这样的代码也是可以的:

if (true) {
    var a = 5;
}

alert(a); // 5

跟你的代码的道理是一样的

收获园豆:5
artwl | 专家六级 |园豆:16536 | 2012-09-03 09:38

应该不是改变了this的指向吧,在with里面他用的是自己的this而不是外部函数的this吧!我也想到javascript里面with没有作用域的,但是看《javascript高级程序》中说:with会延长作用域,也就是说在当前作用域链添加新的变量对象,但是依照书上说的话,当with执行完后,活动对象应该被销毁,而且位于作用域链上的活动对象不能往下访问下面的活动对象!我都被搞糊涂了。。。。。。。。。。。哎........

unbreakable | 园豆:111 (初学一级) | 2012-09-03 13:06

@unbreakable: 是没有改变this指向,回答已修改。

artwl | 园豆:16536 (专家六级) | 2012-09-03 13:11

@artwl: 这个东西都搞糊涂了

unbreakable | 园豆:111 (初学一级) | 2012-09-03 20:42
其他回答(1)
0

对于JS,没有块级别的作用域,都是函数级别的作用域

chenping2008 | 园豆:9836 (大侠五级) | 2012-09-03 15:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册