Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解释分号的简单方法_Javascript - Fatal编程技术网

Javascript 解释分号的简单方法

Javascript 解释分号的简单方法,javascript,Javascript,我的妻子正在用Javascript编写代码,分号让她很沮丧。她问我哪些行需要以分号结尾。她才刚开始,所以我不想在这里用“语句”、“表达式”等来吓唬她。我只是告诉她不要用分号,毕竟是JS;) 那么我应该如何解释呢?我的Javascript有点生疏,但我相信你可以逃脱: 每一行,除非它已经以}或{结尾。然后确保每一个语句都在一个新的行上,尽管考虑到最初的问题,我认为这不是一个问题 不以分号结束行是个坏主意。在某些情况下,它实际上不起作用 编辑 在几乎所有的情况下,它都应该是好的,并且在另一个答案中发

我的妻子正在用Javascript编写代码,分号让她很沮丧。她问我哪些行需要以分号结尾。她才刚开始,所以我不想在这里用“语句”、“表达式”等来吓唬她。我只是告诉她不要用分号,毕竟是JS;)


那么我应该如何解释呢?

我的Javascript有点生疏,但我相信你可以逃脱: 每一行,除非它已经以}或{结尾。然后确保每一个语句都在一个新的行上,尽管考虑到最初的问题,我认为这不是一个问题

不以分号结束行是个坏主意。在某些情况下,它实际上不起作用

编辑 在几乎所有的情况下,它都应该是好的,并且在另一个答案中发布的文章是关于它的很好的阅读,但是我仍然坚持我对分号的热爱*

  • 分号结束每件事
  • 你不想在if(test)之后立即结束它,因为这样它就结束了那件事(事实上,它不是无效的,你只是真的不想在那里结束它)。对于(a;b;c)(但是
    for
    中的每件事都是一件事)
  • x=2+1+3+4+5*10+2;
    是一个单一的东西,否则你不会得到整个总和。即使超过三行或四行,你也希望它是一个单一的总和-一个单一的东西
  • 大括号将一些东西组合成一个大东西。因为它们已经是有结尾的东西了,所以它们不需要分号。但这不会有什么坏处

  • 简单的规则是,所有语句都必须以分号结尾。表达式、块和函数声明等不会以分号结尾。以下内容可能会有所帮助

    块不会以分号结尾:

    if ( /*condition */ ) { // start of block, no semicolon
      ...                   // function body
    }                       // end of block, no semicolon
    
    其他块也是如此,如do..while、while、for..in等

    函数声明没有分号(它们使用块):

    看起来像块但不是块的东西:

    // Object literal isn't a block, it's a statement so uses {}
    var obj = {name: 'fred', sex: 'male'};
    
    // Object literal over several lines has one semicolon at the end
    var obj = {
        name: 'fred',
        sex: 'male'
    };
    
    函数表达式作为语句:

    (function(){...}());  // expression in (), the
                          // terminating semicolon makes it a statement
    
    多行:

    (function(){  // Start of block (function body) doesn't use semicolon
        ...
     }()          // block end, no semicolon.  Can't end statement here
                  // (unbalanced parenthesis) so no semicolon after ()
    );            // but end of statement does need semicolon
    
    请注意,函数表达式可以只是表达式

    e、 g.传递调用函数表达式结果的函数调用(注意函数表达式体中以分号结尾的语句):

    要测试是否需要分号,请删除两行代码之间的换行符:

    var a = 'foo';
    alert(a);
    
    删除换行符:

    var a = 'foo'; alert(a); // works
    
    删除分号:

    var a = 'foo' alert(a); // fails
    

    分号位于:
    1。
    赋值的右侧。
    2。
    函数调用。
    3。
    表达式…+1,用于用如此多的细节覆盖大括号,但第一点可以做一些附加。
    结束每件事
    如中所示,如果在行的末尾有一个运算符,或者下一行使用返回值如果是上一个,那么你就不能“结束”它,否则它就会破裂。@Fabricio Matté这是对“事物”的一个很好的阐述。与这些事物的平衡总是在足够含糊以传达要点之间,而不是不精确到造成比你解决的更多的混乱。(为什么我喜欢“好的,这是含糊的想法”之后。)“好吧,这是确切的规则”在坏习惯开始之前,尽早而不是晚一点)是的,我明白了。虽然我的阐述不是很详细,它不包括函数声明/表达式等。但是你对
    事物的解释应该足以按照OP的要求给出一个基本概念。学习基本知识非常重要,她应该学习不同类型的语句,并且这些语句需要以分号结尾lon.其实没那么难。使用JSLint作为一个学习工具(学会忽略或容忍它的挑剔)。@Fabricio Matté是的,在某个时候,你必须扔掉所有这些,然后说,“好的,这是确切的规则”。做……而以分号结尾。哦,尽管它似乎可以省略(至少在Firefox和IE9中)。它可以在行尾省略,就像大多数分号一样。@Jonhana浏览器容忍
    do{}while(false)var i=3;
    ,在我看来,他们不应该这样做。或者自动插入分号比我想象的要复杂一些。
    var a = 'foo'; alert(a); // works
    
    var a = 'foo' alert(a); // fails