我可以在javascript中使用花括号来分隔代码段

时间:2013-10-24 19:04:04

标签: javascript

以下是一些示例代码。我想知道为什么我不应该这样做。

//some code
var x = "hello";

{
    var y = "nice";

    function myfunction() {
        //do stuff . . .
    }
}

我看到这样做的好处是能够以块的形式组织代码段,并让自动格式化程序做一些工作......

在我的测试中{}在创建var或函数时不影响范围。

5 个答案:

答案 0 :(得分:9)

这个答案是在早期JavaScript实现的时候写的。虽然适用var的相同规则,ECMAScript 2015 (aka ES6)会引入let variable declaration statement, which follows "traditional" block-scoped rules

let使用块进行范围设定的示例,该块记录“1”,“2”,“1”:

{ let x = 1; console.log(x); { let x = 2; console.log(x) }; console.log(x) }

MDN Reference on Block总结了块的用法:

  

重要提示的JavaScript具有块范围。使用块引入的变量的范围限定为包含函数或脚本,并且设置它们的效果将持续超出块本身。换句话说,块语句不引入范围。 尽管“独立”块是有效的语法,但您不希望在JavaScript中使用独立块,因为如果您认为它们在C或Java中执行类似此类块的操作,则它们不会按照您的想法执行操作。 / em>的


正如在MDN上讨论的那样,语法完全有效,因为{ StatementList }(又名Block)是有效的Statement作品。

然而; 因为这非常重要:a new block does not introduce a new scope函数体引入新范围。在这种情况下, xy变量具有相同的范围。

另外一个FunctionDeclaration should appear only as a top-level statement - 也就是说,它必须是一个直接在程序或函数体下的语句,而不是一个块。在这种情况下,myfunction的声明为"not reliably portable among implementations"

可以使用IIFE (Immediately Invoked Function Expression)模式,虽然它解决了上述技术问题,但我不建议这样做,因为它会使代码复杂化。相反, I 将简单地创建更多命名函数(命名函数可以嵌套!),可能在不同的模块或对象中,视情况而定。

var x = "hello";

;(function () {
   // New function, new scope
   // "y" is created in scope, "x" is accessible through the scope chain
   var y = "nice";

   // Now VALID because FunctionDeclaration is top-level of Function
   function myfunction() {
   }
})(); // Invoke immediately

// No "y" here - not in scope anymore

答案 1 :(得分:3)

意识到这是旧的,但我想我会更新ES2015。

对于{+ 3}}

中的let + const,我们有更多的意义

public static void displayArray(String[] sentence) {
    System.out.print("Your sentence is: ");

    for (String word : sentence) {
        System.out.printf("%s\t", word);
    }
    System.out.println();
}

答案 2 :(得分:2)

我不明白最外层花括号背后的原因,但函数总是写在javascript中的花括号内。

如果您正在与其他开发人员合作,他们可能会发现外部花括号更加混乱而不是有用,可能会产生一些负面影响:http://encosia.com/in-javascript-curly-brace-placement-matters-an-example/

答案 3 :(得分:0)

可能有很多理由不以这种方式编写代码......可读性是#1,因为大多数人会发现这会使代码难以阅读。但是,从技术上讲,编码没有任何问题,如果你更容易阅读,那么应该没问题。

答案 4 :(得分:0)

我认为当你开始编写更复杂的程序时,这个约定会有问题。必须有一个很好的理由,除了添加额外的代码行之外,人们不会像其他代码那样进行编码。

但是由于Javascript没有块作用域,代码仍然有效。