JS如何延长作用域链?

1、JS的with语句如何延长作用链?如下一段代码:

function buildURI(){
            var qs = '?debug = true';

            with(location){
                var url = href + qs;
            }

            return url;
        }
        alert(buildURI()); 

url如何会在with语句外面就能被调用?它不是location对象的属性吗?href是否跟url一样,也可以被外面的访问?

2、try-catch语句呢?

3、还有没有其他延长作用域链的方法?

url是你定义的变量,也不是location的属性。with语句块是没有作用域的,所以url在buildURI中都可以访问,除非你用的es6的let定义,而不是var定义

2同理

不懂你的延长作用域链是什么问题。。应该是你没搞清楚var申明的变量作用域

with不被建议采用,js只有块级变量的概念,延长作用域可以有很多方法,比如使用闭包