with(location) { var url=href+"aaa"; } alert(url);
为什么外部可以访问url,不是执行到with语句创建临时作用域(变量对象)然后执行完毕对象销毁,那么这个变量对象被销毁了,为什么还可以方位ul??请各位大虾能推荐一下关于这方面的文章!谢谢
with不是function,它不会引入新的变量作用域,所以这里的url外面会访问到。
JavaScript没有块级作用域,只有函数级作用域,所以像下面这样的代码也是可以的:
if (true) { var a = 5; } alert(a); // 5
跟你的代码的道理是一样的
应该不是改变了this的指向吧,在with里面他用的是自己的this而不是外部函数的this吧!我也想到javascript里面with没有作用域的,但是看《javascript高级程序》中说:with会延长作用域,也就是说在当前作用域链添加新的变量对象,但是依照书上说的话,当with执行完后,活动对象应该被销毁,而且位于作用域链上的活动对象不能往下访问下面的活动对象!我都被搞糊涂了。。。。。。。。。。。哎........
@unbreakable: 是没有改变this指向,回答已修改。
@artwl: 这个东西都搞糊涂了
对于JS,没有块级别的作用域,都是函数级别的作用域