【前端学习之路】 JavaScript高级部分 尚硅谷学习笔记

1、JavaScript基本数据类型

* 基本(值)类型

  • String :         任意字符串
  • Number :     任意数字 
  • Boolean :     true/false
  • Undefined :  undefined
  • Nul l:            null

* 对象(引用)类型

  • Object :        任意对象
  • Function :     一种特别的对象(可以执行)
  • Array :          一种特别的对象(数值下标,内部数据是有序的)

* 判断数据类型

  • typeof :                        返回数据类型的字符串表达
  • instanceof (实例) :  判断对象的具体类型 
  • ===

2、对象

* 什么是对象

用来保存多个数据的容器

* 为什么要用对象

便于统一管理多个数据

* 对象的组成

属性:属性名(字符串)和属性值(任意)组成

方法:一种特别的属性(属性值是函数)

 3、函数

* 什么是函数

实现特定功能的n条语句的封装体

* 为什么要用函数

提高代码复用性

便于阅读交流

* 回调函数

①自己定义的   ②不用手动调   ③最终执行的  满足这三点的都是回调函数

常见的回调函数

a.dom事件回调函数

b.定时器回调函数

c.ajax请求回调函数 

d.生命周期回调函数

* IIFE(立即执行)函数

作用:①隐藏实现   ②不会污染外部(全局)命名空间   ③用来编写JS模块

* 函数中的this变量

  • 任何函数本质上都是通过某个对象来调用的,如果没有指定则是window对象
  • 所以函数内部都有一个变量this
  • this的值是调用函数的当前对象

4、函数的prototype

每个函数都有一个prototype属性(显示原型),这个属性默认指向一个Object空对象(即称为原型对象)。而每个原型对象中又有一个constructor属性,此属性指向函数对象

给原型对象添加属性(一般是方法),函数的所以实例对象自动拥有原型对象中的方法 

实例化对象中的属性是__proto__(隐式原型),也指向原型对象

* 原型链

(注:其实Object空对象 是 Object函数对象的实例)

访问一个对象的属性时,先在自身属性中查找,找到返回;找不到就沿着__proto__这条链向上查找,找到返回;如果还找不到,则返回undefined

5、变量提升与函数提升

函数提升:只要定义了一个函数,无论将函数写在哪里,系统总会将这个函数放置在最前面,则无论在哪个位置都可以调用这个函数

变量提升:给一个变量声明+赋值,系统只会将声明放在最前面,而赋值依旧在原来的位置

6、执行上下文类型和执行上下文栈

类型:全局执行上下文和函数执行上下文

全局执行上下文:任何不再函数内部的都是全局执行上下文,首先会创建一个全局的window对象,并且设置this值等于window对象,一个程序中只有一个全局执行上下文 

函数执行上下文:当一个函数被调用时,就会为该函数创建一个新的执行上下文,函数执行上下文可以有任意多个

栈管理:JavaScript引擎使用执行上下文栈来管理执行上下文

7、作用域

作用域的个数是 定义函数的个数加上全局作用域。作用域的作用是隔离变量。

作用域是分层的,内层作用域可以访问外层作用域,反之不行。在当前作用域查找所需变量,如果找不到就去父级作用域查找,直到访问window对象就终止,这一层层就是作用域链。

作用域是静态的,只要函数定义好了就一直存在,且不再变化,执行上下文是动态的,调用函数时创建,函数调用结束后就被释放。

8、闭包

闭包是指有权访问另一函数作用域中变量的函数,创建闭包最常见的方式就是在一个函数内创建另一个函数,内部函数可以访问当前函数的局部变量。

 函数B就是闭包,需要注意的是,必须先调用A,B才可以访问到A里面的变量

上面这个例子中,调用 f() ,会直接进入函数 fn2, 因为 fn1 的返回值是 fn2。

调用几次外部函数就产生几次闭包,故上述例子只产生一个闭包。释放闭包: f = null

闭包的作用:在函数外部可以操作函数内部的变量/函数;且函数内部的变量在函数执行完毕后,仍存活在内存中(延长了局部变量的生命周期)

闭包的缺点:函数执行完后,函数内的局部变量没有释放,则其占用内存的时间会变长,容易造成内存泄露

(补充:

    内存溢出:程序运行需要的内存超过了剩余内存,就会抛出内存溢出的错误

    内存泄露:占用的内存没有及时释放导致


版权声明:本文为a123456_9原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。