js高级技巧第一天

-----------------------------------课前小知识---------------------------

几个测试小代码:关于预解析的。

js代码执行分两个阶段:

1)提升声明

2)真正执行,此阶段才会产生执行上下文(栈内存空间)

全局执行上下文和局部执行上下文:

当js代码刚开始执行时,会产生一个全局的执行上下文,当调用一个函数的时候才会产生一个局部的执行上下文。

js中的声明:

变量的声明:使用var 来声明一个变量,不管什么情况下,加var变量都会提升。

函数的声明:使用function来声明一个函数,函数在条件语句中,函数名会被提升,但是函数值不会被提升。

-------------------------------------今天新内容---------------------------

一:预解析

预解释概念:预解释·(预解析):提升声明:在预编译期间,它会把声明进行提升,提升是加var的变量和function声明的函数

1)关于变量的提升 ,加var的变量的提升,只提升变量的声明,不提升变量的赋值

2)函数的提升,function声明的变量的提升,不只是提升函数名,还提升函数值

小知识点(delete是删除运算符);

二:加不加var的区别:

加var和不加var有什么区别:

1)在全局作用域下,加var的变量会提升,不加var的变量不会被提升;

2)在全局作用域下,无论加还是不加var,都会作用于window这个对象

3)在局部作用域下,不加var的变量也会作用域window这个对象

4)不加var的变量只能作为全局变量,不能作为局部变量

5)不加var的变量可以被删除,加了var的变量不能被删除

小知识:for in 用来判断某个属性是否属于某个对象

三.js 执行代码步骤与阶段

代码执行步骤:

1)预编译 2)执行

全局执行上下文和局部执行上下文:

全局执行上下文:当代码开始执行时,就相当于全局执行上下文

局部执行上下文:当调用一个函数的时候,就相当于一个局部执行上下文

整个步骤:首先:

1,预编译:提升 var  function(数据存储)

2,执行代码

然后(当调用一个函数时):

1,形参的赋值

2,提升

3,执行代码

四:关于变量的声明

使用var声明变量的不足,Es6提出使用let来声明变量

let声明变量------------------不能提升---------------------------

1)使用let声明变量会产生一个块级作用域({}形成的作用域)(里面的东东外面不能用)

2)在全局作用域下面不能访问块级作用域

3)使用let声明的变量不能提升

4)let声明的变量不会作为window的属性

5)let声明的变量不能重复声明

6)暂时性死区:可以去es6.ruanyifeng.com去了解。(TDZ)

const声明变量------------------使用const声明常量------------------------

const不能只声明,不赋值,所以记得一上来就要给它赋值。

使用const声明的变量也不能提升

以后做项目都用const,记住能使用const就使用const,如果声明的变量需要改变,就用Let。

五.条件中的函数声明注意点

1)有条件的情况下:只提升函数名,不提升函数值,

当满足条件的时候,进去的第一个操作就是给这个函数赋值

2)没条件的情况下:同时提升函数名和函数值,和上面说的一样。

猜你喜欢

转载自blog.csdn.net/zwy1231/article/details/103367274