js中的分号

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后面加了分号。


因此不要把分号单单认为只是用来结束某段代码,它还可以用来隔离某段代码和别人划清界限。

css:before和:after
« 上一篇 2020年11月12日 上午12:00
js事件委托也叫事件代理
下一篇 » 2020年11月12日 上午12:00