作用域
程序运行代码是变量的区域
作用域可以决定如何查找变量,也就是代码执行时 变量的使用权
变量提升 发生在代码执行前
变量提升只看当前作用域中var 与代码是否执行无关
代码执行:与赋值等程序有关
函数封装
1.确定函数作用
2.确定形参: 1.方法体内部需要方法体外部的内容
3.根据作用确定返回值。返回值也是将函数内部内容输出到函数外部的方式
函数方法体内部是私有的,函数外部是不可以访问函数内部的
函数提升
先提升函数再变量
先提升变量 再提升函数
相同名字的 后提升的后赋值
拷贝
分别浅拷贝和深拷贝:
数据存放在内存中
内存分为栈 和堆
拷贝执行在栈中完成的
基本类型数据存放在栈中;引用数据类型存放在堆中
变量在栈中 赋值为数据,或者指针
浅拷贝:任意一个发生改变另一个也会发生改变,浅拷贝原因因为只有一个数据,内存中只有一个地址
基本数据类型拷贝,是深拷贝
数据对象拷贝
单一结构的数组 对象
拷贝的目的 复制数据
在堆中开辟一个空间 形成一个新的地址
多个地址 多个数据,彼此不影响
JSON对象
json 对象就是数据,json格式数据
json 可以完成深拷贝
注意 字符串 与 JSON字符串是不同的
字符串是不能独立语言单独存在,js支持但是java不支持
json 可以独立语言单独存在, js支持 java也支持
JSON.stringify() 将数组或着对象变为JSON 字符串,返回json字符串 ,参数 js 的任意类型
JSON.parse() 将JSON字符串变为JSON对象
注意使用json.parse 之前必须使用json.stringify
递归
递归 在函数方法体内调用自身
做算法
反复执行同一段结构的代码,递归
方法:1.找规律 2.找出口
递归优势:代码简介,通俗
弊端:最先运算的 最后输出结果 代码难读懂:规律出口难找
递归深拷贝
1.首先排除特殊条件 js基本数据类型
2.数组和对象分别进行 深拷贝
2.1 首先创建[]{}
2.2 将拷贝内容添加到[]{} 中