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

我正在研究 N. Zakas 的“Professional JavaScript for Web Developers”,我遇到了这个片段。据我了解with,这是一个通过将location对象推到前面来增加范围链的语句。

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

4

2 回答 2

1

withlocation出于查找的目的添加参数,但您var url仍然被提升到包含函数 - 即buildUrl当您创建一个变量时,而不是查找一个。

但是,您应该完全避免with请参阅 MDN 上的声明

于 2016-11-21T10:58:00.623 回答
0

不推荐使用 with 语句

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

函数 foo() { "使用严格"; 和({}); }

SyntaxError:严格模式代码可能不包含“with”语句最佳实践:不要使用 with 语句。

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

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

var b = foo.bar.baz; 
console.log("Hello "+b.first+" "+b.last);
于 2016-11-21T10:52:36.163 回答