内部的变量对象语句是绑定的?

时间:2016-11-21 10:47:41

标签: javascript with-statement scope-chain

function buildUrl() {
  var qs = "?debug=true";
  with(location){
    var url = href + qs;
  }
  return url;
}
buildUrl(); // it will work. WHY?

我正在通过N. Zakas的“专业JavaScript for Web Developers”工作,我遇到了这个片段。从我的理解with是一个声明,通过在这种情况下将location对象推到前面来扩充范围链。

似乎将url局部变量分配给函数激活对象。为什么不将其分配给location

2 个答案:

答案 0 :(得分:1)

with为了查找而添加了参数location,但您的var url仍然被提升到包含函数 - 即buildUrl,因为您正在创建变量,没看一个。

但是,您应该完全避免withsee the statement on MDN

答案 1 :(得分:0)

不推荐使用with语句

通常不鼓励使用with语句。 在严格模式下禁止使用:

  

function foo(){" use strict&#34 ;;与({}); }

     

SyntaxError:严格模式代码可能不包含' with'陈述最好的   练习:不要使用with语句。

with(foo.bar.baz) {
    console.log("Hello "+first+" "+last);
}

请使用短名称的临时变量。

var b = foo.bar.baz; 
console.log("Hello "+b.first+" "+b.last);