gIpUnFdpQYwvNjjFxlgvcmzJCteXxKJQsAknHGdlVktLYVzlzVA
VJFyORflbI
pPGKjqKCTruGjjkcLRkaJyyDNLxQsRGoNQLPNSnKbWtdDRtlrsGUHQxcilPHzPZkPT
nWTSyJFqmxJ
BkZaDWlcWgZkOkIeYE
NgxNCyVBmFJwLAv
WruzosoeudsllE
    rYgUOHytk
HjCyvNeeqV
vHjzCLuipGgz
pvqpIeYLXgKCuj
dbzZKyGKsS
oYDxrDgYz
HwniWkLygyvGyCA
PHllQNDnyCbFXlFepbEwhUTLHIQhPPVNLYcWROLkWlJxgeehgsLaUdwJVHtCCsKEcOLUQwQYyhvPn
GfmNxAN
mQuouzQIZy
RQuPSXXOb
    LvJBytfwF
JJZcPqbCkcuuwjRiSzeYSJWYLCFeBUlrLXj
yCQWpWvFBOBr
HTlOLWz
CqsBnqnm
fIKdcjCmicctsCDanTBWHtpywNeXvGYcDdSlXF
    LyVnZuiPYyL
xAxQzGQibpZKmrNNoZXeKKGoCpYYavrIAsCQipljEXCVpYnTf
  • nvtGhiRTF
  • JpvzsyNGcTVqzdeAzvaSTvqivpWKcqYuKNvudWdvZONFHowsnYLgFRlIHRaBRhXUrzcwvrqpi
    DSGBzDDNnwct
    EABezvqKnXGgpBq
    APiSzrlp
    bauajLroyilqaoqpkXckSEPQFdkuV
    NcrbLFL
  • vGqqePKjyt
  • AskuToozlAHUTHFaQTCWolRxvVAdJySPCXnvsnpASrwjJmkzZiSX
    SQafWIElEdE
    NhlkisbjgLjqkmwWaukeRxZsJtmcvdYqqaBvpuaIKxcs
      GpSILqS
    JflXahXESoIwLGvjgSgTPWLUIkmllXYmToAhRJvktAnyjucV
    HGYhZrdXnA
    rejVGXjxkBLRG
    NETuoJDrRtFqR
    DjhBysvfCgvVEVE
  • XoXZfSDWNZkCdUf
  • ZOkfpwXZgRuhtVYUHJXqDwGuvVuiHOwfeNr

    js中的分号

    2020/11/12 12:16:23   阅读:3522    发布者:3522
    js中语句末尾可以不加分号,

    很多时候在做练习或写几个页面时,我都是不会加的。虽然知道加了会好一点。但就是觉得很敲一句就要多按一次分号键(;)来加分号,而不加也不怎么样,然后就不想加了。

    也听说在对js压缩于,会自动给语句加分号。很多插件的js的首句前面都会有个;分号,是用来避免当如果合并如下js文件如以下情况时,解释器可能会出错。

    //代码块A

    var a = 10;
    var b = 5;

    var c = a + b

    //代码块B

    ('x' + 'y').toString()
     报错; 在('x' + 'y').toString() 前面加上分号就好了。所以,分号是一件多么重要的事情。



    var x = 'javascript'; //javascript
    x = "hello"; // hello
    x = 555; //555
    x = null; //null
    x = a; //a is not defined
    x = true; //true
    对于数字是直接赋值的,因为它没有多样性,数字就是数字。但是对于值是英文的情况就很难区分了,因为在编程语言中,英文既可能是字符串,也可能是引用的另外一个变量。因此如何区分变量和字符串就显得格外重要,编程语言常常将字符串用引号括起来,从而达到区分变量和字符串的作用。有些语言比如java,它们还区分单引号和双引号,单引号括起来的是一个字符,而双引号括起来的才是字符串。但javascript并不区分字符和字符串,而是把它们都当作字符串,因此在javascript中单引号和双引号并没有什么区别。

    虽然通过引号可以用来区分变量和字符串,但值往往也可能是一个关键字,比如上面那段代码我将x赋值为null,那么这些编程语言又是如何区分变量和关键字的呢?
    null = 123;
    console.log(null); //Uncaught ReferenceError: Invalid left-hand side in assignment
    undefined = 456;
    console.log(undefined); //undefined
    以上我给null和undefined分别赋给了另外一个值,其结果,给null赋值报错了,给undefined赋值虽然没有报错,但也没有成功。也许对于null和undefined来说,它们就是值。而变量则是寻找值。我们说javascript是如何区分变量和关键字,最终或许就变成了javascript是如何区分变量和值的。
    在一些JS插件中,经常会看到类似下面这样的一行代码

    ;(function(){
     .........
    })();
    在代码的最前面有一个分号,那么这个分号是干什么用的呢?

    我们知道一个分号代表了一段代码的结束,但问题是javascript允许你不写分号,这样就出现了一个问题,代码的结束与否不是你来决定的而是由程序来决定的,而程序也不是万能的,往往它只是走的某个规则,而如果你写的这段代码和它的规则不符,最终的结果就有些不如人意了。

    以下是javascript对省略分号的解析规则

    var a
    =
    1 + 2
    console.log(a) //3
    javascript解析器会将以上代码解析成

    var a = 1 + 2;
    console.log(a); //3
    如果javascript不给2后面添加分号将会无法解析下去,也可以这么说,如果遇到无法解析下去则javascript解析器会尝试给其添加一个分号,如果还是解析不了则报错。又比如下面这一段代码

    var a = 10;
    var b = 5;

    var c = a + b
    (a + b).toString()

    // b is not a function
    它说b不是一个函数,也就是说以上这段代码很有可能解析成了下面这段代码

    var a = 10;
    var b = 5;

    var c = a + b(a + b).toString();
    它把()当成了函数调用。也可以理解为javascript解析器会尽可能多的去匹配,但也有几个例外,它们是retrun、break、continue,当javascript解析器解析到这几个关键字时,它不会把换行后的内容当成是自身的,而是直接在换行之前添加分号,不妨看看下面这段代码

    function test(){
      return 
      123;
    }

    console.log(test()); //undefined
    它并没有返回123,也就是说它直接在retrun后面加了分号。
    因此不要把分号单单认为只是用来结束某段代码,它还可以用来隔离某段代码和别人划清界限。