【问题标题】:Should with()-statements apply to nested functions?with() 语句应该适用于嵌套函数吗?
【发布时间】:2011-05-31 08:46:56
【问题描述】:

取以下代码:

var a = new Object(); a.meep = 5; 函数 foo() { 与(一){ 功能栏(){ 返回meep; } 返回栏(); } }

这样的代码在 Chrome 中对我来说是失败的,但在 Firefox 中可以工作。哪个是对的?

【问题讨论】:

  • 无论如何:很少有需要with的情况。你应该避免使用它和be aware of its problems。在 JS 的 strict 模式下甚至不再允许。
  • 输入“gl”。数百次并不好玩。
  • 如果您必须在 one 块中键入数百次,那么您应该重新考虑应用程序的结构。
  • 不,有多个块。和多个 with()s。键入六次很容易击败键入 gl。一百次。

标签: javascript


【解决方案1】:

正确的做法是永远不要使用with。曾经。任何语言。

多年来with 造成的错误数量和浪费的开发时间......它应该在goto 下面的黑名单上。

如果您真的不想键入,请使用代码完成或将长表达式分配给短变量。也就是说,我认为这很好。它将适合 Javascript 的其他魔术范围 trics。 :)

【讨论】:

    【解决方案2】:

    一般建议:不要使用 with。

    但是,要让您的代码在 Chrome 中运行,请更改:

    var a;
    

    到:

    var a=new Object();
    

    和:

    function bar() {
    

    到:

    var bar = function() {
    

    给出完整的代码如下:

    var a=new Object();
    a.meep = 5;
    
    function foo() {
      with (a) {
        var bar = function() {
          return meep;
        }
        return bar();
      }
    }
    

    【讨论】:

    • 我已经修复了代码。我想知道哪种行为是“正确的”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    相关资源
    最近更新 更多