JavaScript中的WITH语句有什么问题?

but*_*oxa 2 javascript jquery

我似乎记得WITH有一个问题.我不会错过它; 我更喜欢我的代码的每一行都独立存在.

当我(在SO)学习人们认为链接他们最喜欢的jQuery功能时,我开始想知道这一点.JavaScript的WITH和jQuery的链接基本上是相同的功能,对吧?

rp.*_*rp. 8

不,他们不是一回事......

With是一个简短的引用类成员,而无需完全限定其名称.

with o 
{
   x = y;   // where x is a member of o. But how can you tell for sure?
}
Run Code Online (Sandbox Code Playgroud)

阅读道格拉斯·克罗克福德关于With的内容.他鼓励避免它 - 说它容易出错并且含糊不清.我同意他的看法.

jQuery链接是一种实现流畅接口的方法,允许您将结果从一个方法直接传递到另一个方法.也就是说,给定方法的输出作为下一个方法的输入.如果你使用大量的空格,jQuery链接确实可以看起来像.以下示例来自John Resig的演示.

jQuery("div").hide("slow", function(){
  jQuery(this)
    .addClass("done")
    .find("span")
      .addClass("done")
    .end()
    .show("slow", function(){
      jQuery(this).removeClass("done");
    });
});
Run Code Online (Sandbox Code Playgroud)

阅读jQuery链接在这里这里


use*_*401 6

与链接并不完全相同.有影响范围,而链接没有.考虑:

a.b.c = foo;
Run Code Online (Sandbox Code Playgroud)

要么:

with(a.b) { c = foo; }
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,你不知道c是否存在于with块之外,所以如果你可能只是在破坏程序的另一部分依赖的东西.