JS

77 阅读3分钟

复习引用类型值的相关知识

1.javaScript中的数据类型有两类:基本类型和引用类型值

image.png

复习浅克隆

  1. 使用var arr2=arr1这样的语法不能实现数组的克隆
  2. 浅克隆:准备一个空的结果数组,然后使用for循环遍历原数组,将遍历到的项都推入结果数组
  3. 浅克隆只克隆数组的一层,如果数组是多维数组,则克隆的项会"藕断丝连"

实现深克隆

使用递归思想,整体思路和浅克隆类似,但稍微进行一些改动:如果遍历到项是基本类型值,则直接推入结果数组;如果遍历到的项是又是数组,则重复执行浅克隆的操作。

变量作用域

javaScript是函数级作用域编程语言:变量只在其定义时所在的function内部有意义

image.png

全局变量

如果不将变量定义在任何函数的内部,此时这个变量就是全局变量,它在任何函数内都可以被访问和更改。

image.png

遮蔽效应

如果函数中也定义了和全局同名的变量,则函数内的变量会将全局的变量"遮蔽"

image.png

作用域链

先来认识函数的嵌套:一个函数内部也可以定义一个函数。 和局部变量类似,定义在一个函数内部的函数是局部函数。

image.png 在函数嵌套中,变量会从内到外逐层寻找它的定义。

image.png

不加var将定义全局变量

在初次给变量赋值时,如果没有加var,则将定义全局变量

image.png

什么是闭包

javaScript中函数会产生闭包(closure)。闭包是函数本身和该函数声明时所处的环境状态的组合。

image.png 函数能够"记忆往"其定义时所处的环境,即使函数不在其定义的环境中被调用,也能访问定义时所处环境的变量。

观察闭包现象

在javaScript中,每次创建函数时都会创建闭包。 但是,闭包特性往往需要将函数"换一个地方"执行,才能被观察出来。

闭包非常实用

闭包很有用,因为它允许我们将数据与操作该数据的函数关联起来。这与"面对对象编程"有少许相似之处。 闭包的功能:记忆性、模拟私有变量。

使用闭包的注意点

不能滥用闭包,否则会造成网页的性能问题,严重时可能导致内存泄漏。所谓内存泄漏是指程序中动态分配的内存由于某种原因未释放或无法释放。

什么是IIFE

IIFE(Immediately Invoked Function Expression,立即调用函数表达式)是一种特殊的javaScript函数写法,一旦被定义,就立即被调用。

image.png

形成IIFE的方法

函数不能直接加圆括号被调用。

image.png 函数必须转为"函数表达式"才能被调用。

image.png

IIFE的作用 为变量赋值

为变量赋值:当给变量赋值需要一些较为复杂的计算时(如if语句),使用IIFE显得语法更紧凑。

image.png

image.png

IIFE的作用 将全局变量变为局部变量

IIFE可以在一些场合(如for循环中)将全局变量变为局部变量,语法显得紧凑。

image.png