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
?
答案 0 :(得分:1)
with
为了查找而添加了参数location
,但您的var url
仍然被提升到包含函数 - 即buildUrl
,因为您正在创建变量,没看一个。
但是,您应该完全避免with
,see 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);