JS中的关键字WITH是什么意思?

时间:2015-11-05 17:49:00

标签: javascript

  

/ JS中的关键字WITH是什么意思? /

    with(object)command;

4 个答案:

答案 0 :(得分:4)

var obj = {a: 1,b: 2, c: 3}; // more "tedious" to repeat "obj" obj.a = 2; obj.b = 3; obj.c = 4; // "easier" short-hand with (obj) { a = 3; b = 4; c = 5; } 允许您创建一个绑定到对象范围的块。类似的东西:

{{1}}

但这会产生很多问题。它的问题在Kyle Sympson的书" Scope& Sons的第2章中得到了很好的解释。封" "你不了解JS"。我建议你阅读它。不要使用它,如果你不太了解你正在做什么,或者这可能很难调试。

答案 1 :(得分:1)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/with

" JavaScript通过搜索与包含该非限定名称的脚本或函数的执行上下文关联的范围链来查找非限定名称。 '与'在评估其语句体时,语句将给定对象添加到此作用域链的头部。如果正文中使用的非限定名称与作用域链中的属性匹配,则该名称将绑定到属性和包含该属性的对象。否则抛出ReferenceError。"

obj = {'when': 'now'}
with (obj) {
  console.log(when)
}

答案 2 :(得分:1)

允许将对象的属性视为语句中的局部变量。

var obj = { text: "testing" };
with (obj) {
  console.log(text); 
}

而不是

var obj = { text: "testing" };
console.log(obj.text);

这是不推荐使用的,在严格模式下是禁止的。

答案 3 :(得分:1)

扩展声明的范围链

扩展链可能是我们更喜欢JavaScript库...

<build>
  <plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <goals>
                    <goal>java</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <mainClass>com.xyz.wbx.ProvaTopology</mainClass>
        </configuration>
        </plugin>
  </plugins>
</build>

但出于某些虐待狂的原因,我们决定在代码中不喜欢本地扩展链......

$("stuff")
  .more()
  .again()
  .somethingElse()
;

糟糕的例子和糟糕的用法

每当我说声明没有什么不好的时候,有人会永远指出这个血腥的帖子......好的,来自雅虎! ... 所以呢? 老实说,我可以发布成千上万个不好的例子,并指出这个或那个库,功能,方法,评估等等......它就像神话评论是邪恶的......所以怎么会有一个第一个谈论邪恶的是使用eval来加速代码解释? 容易:有案例和案例!

with(){}

的力量

我给你最基本的例子,几分钟前发生在twitter上的事,好吗? 我想用最少量的字符来获取脚本注入......对吧?

with(stuff){
  more()
  again()
  somethingElse()
};

优雅,内存感知(无变量声明,无需创建闭包),紧凑,高效,跨浏览器......其中包括&#34; JavaScripters&#34;用来在这里分配变量?

在任何情况下,我都希望看到谁能够生成比先前示例更小的代码,注意在当前范围内删除该操作的任何痕迹。