ES6学习笔记

192 阅读3分钟

代码段

一个script标签就是一个代码段。

特点:

1.独立 当一个一个script里的内容出错之后,并不会影响其他script块里的内容,其他的仍能够正常运行。

2.共享,在一个代码段里定义的数据,在之后的script里仍能调用。

3.代码段的实现顺序只与script标签的顺序有关,依次从上往下执行。

变量

声明变量有三种方式

var 因为script的预编译机制,用var声明的变量会被提升到该代码块最前处。{

声明和定义的区别:
var a; 这是声明一个变量a。
var a=1; 在声明变量的同时给变量赋值,这叫做定义变量。

同样的,函数内的var会被提升到函数内的第一行。对于函数的提升,需要注意只有函数声明会被提升,函数表达式并不会。{
var b = function(){}  函数表达式
function m(){}          函数声明

} }

let let并不会被预编译提升,但是let只在当前的代码块里有效,不能跨script代码段调用。

 暂时性死区:在let声明变量之前,不能使用该变量
 tmp=233; let tmp;会报错,因为在声明tmp之前,不能使用tmp。
 同样,如果是let声明在局部作用域中,在这之前如果在全局作用域里使用也会报错。

const 不常用,下次再说。

数据的存储与赋值

js里的数据类型分两种:

 1.基本数据类型(栈区)
    数值,字符串,布尔,undefined,null。
 2.引用数据类型(堆区)
    对象object,函数,数组。

判断数据的类型的方法:typeof var a =1; console.log(typeof a);

变量是用来存储数据的,由变量名和数据组成,分别在堆和栈里创建一个内存空间,栈里放数据,堆里放栈里数据位置的地址。例如写 var a=2;

赋值操作:{

如图所示,将a赋值给b的操作是给b也创建一个空间,将a的数据复制一份给b,并不是让怼里面存储的地址指向a的地址。
对于基本数据类型而言:
A == B

比较a,b的类型是否一致。一致,直接比较他们保存在栈区的值。

如果类型不一致,先进行数据类型的转换。然后再比较。

A === B

先做类型判断,如果一致(不一致,直接false),再做值的比较,相同为true,不等为false。
对于引用数据类型
A==B

没有类型比较这一步(都是一个类型,引用类型)。直接判断保存在栈区的值(保存在堆区的真实的数据的地址)是否一致。

A === B 与A == B是等价的。

建议:如果你希望对两个值进行比较,请你一定要使用:

===
把字面量写在 左边。

}

变量的作用域:

1.全局变量 直接设置在代码块中的变量,作用于整个代码块。

2.局部变量 设置在函数中的变量被称作局部变量,其作用域只在函数内,在函数外的代码块中并不能被调用。

3.就近原则 对于同一个变量的多次赋值,会根据就近原则决定。

首先函数b内部的var a被提升到函数第一行,所以第一次输出时a没有赋值默认underfined。
b内的a只作用在函数b内,但是因为函数内的var a 要比外面的var a近 ,所以内部的把外部的覆盖了。

块级作用域: 在script中,并没有块级作用域{},只有函数的{}能划分块级作用域。