Table of Contents
把指针定义删除
闭包:
- 原理:
- 内部函数被保存到了外部,一定会生成闭包
- 因为内部函数会拿到外层[[scope]]的引用
- 缺点:
- 闭包容易造成内存泄漏(该释放的不释放)
- 内存泄漏:占用的内存多了可以使用的就少了
- 解决缺点
- 添加一个立即执行函数,里面执行代码
- 闭包的应用
- 累加器 就是闭包实现的
- 缓存:就是一种存储结构
- 封装;属性私有化
立即执行函数
-
表达式(执行)
- 只有表达式可以被执行符号(小括号)执行
- 能被执行符号执行的表达式,函数的名字就会被忽略(变成了立即执行函数)
- +,-,!,=,与,或,都可以把函数变为立即执行函数(放弃了函数名字)
- ,也是一个运算符,返回后面的值
- https://blog.csdn.net/weixin_33861800/article/details/92056387
-
用处:
- 函数都有作用域
- 用来初始化一些值
- 用来处理一些数据,只要返回值
-
语法:
- (function(){})(参数)建议使用
- (function(){}())
- 一般都要接收返回值
-
特性:
- 执行完毕就被释放
- 避免污染全局变量
对象
-
JavaScript对象增加删除方法
- 1.在函数内部定义
- 2.对象.方法 = func
- 3.删除一个对象 delete
-
对象创建的方法
-
1.对象字面量
- var obj = {} plainObject 对象字面量/对象直接量
-
2.构造函数
-
new 一个函数 ,
- 如果没有返回值,就是返回this
- 这个函数返回值如果是字面量,就忽略该值
- 如果返回引用值,this被替换为返回的引用值
-
系统自带的构造函数(Array Number)
- var obj = new Object();
- 写法上没有什么区别
-
自定义的构造函数
- 构造函数和java等的构造函数意义不一样
- 构造函数一般是大写开头
- 和函数没有任何区别,就是需要new
-
new构造 函数三步(隐式三步转换)
- var this = {}
- 把函数内参数赋值
- return this
-
-
-
包装类
- Number() Boolean() Number()
- 类似java的装箱操作
- 原始值被相应的对象包装起来
- 比如调用length,原始值被包装起来
4.扩展延伸知识
-
python中的函数和JavaScript的函数不同
- 因为python是缩进,所以不能直接把函数定义给数组,要把定义的函数名,给数组
- 可以给数组lambda函数
-
javascript使用单引号还是双引号
- php没有双引号,所以最好使用单引号
-
JavaScript对象与java对象的区别
- 创建可以添加任何属性,删除属性
-
typeof六个值
- String Number Boolean Object undefined function,symbol ES6新加入
-
变量提升过程
- 第一步创建AO对象,(AO = {})Activation Object(执行上下文)
- 第二步找形参和变量声明作为AO对象的属性,值都是undefined(AO = {a :undefined} )
- 第三步将实参和形参相统一
- 第四步把函数声明赋给AO对象里对应的属性
- 预编译不止发生在函数中,也发生在全局中,省略第三步,生成的对象是GO(Global Object)
- 在执行的时候,变量自动赋值,函数要判断是否被调用
- 只要有方法和变量重名,那么这个值一定是方法,后定义的覆盖先定义的
- function(){}(1,3,4)执行结果是
- 什么也不输出,
- parseInt(3,2)的含义
- 二进制的3,转换为十进制
5.知识内容个人梳理
- 手写几个作用域链
function test(){
var test = 100;
function a(){}
function b(){}
}
6.今天都复习了之前的什么内容
python中的函数和JavaScript的函数不同
- 因为python是缩进,所以不能直接把函数定义给数组,要把定义的函数名,给数组
- 可以给数组lambda函数
javascript使用单引号还是双引号
- php没有双引号,所以最好使用单引号
JavaScript对象与java对象的区别
- 创建可以添加任何属性,删除属性
typeof六个值
- String Number Boolean Object undefined function,symbol ES6新加入
变量提升过程
- 第一步创建AO对象,(AO = {})Activation Object(执行上下文)
- 第二步找形参和变量声明作为AO对象的属性,值都是undefined(AO = {a :undefined} )
- 第三步将实参和形参相统一
- 第四步把函数声明赋给AO对象里对应的属性
- 预编译不止发生在函数中,也发生在全局中,省略第三步,生成的对象是GO(Global Object)
- 在执行的时候,变量自动赋值,函数要判断是否被调用
- 只要有方法和变量重名,那么这个值一定是方法,后定义的覆盖先定义的
- 什么也不输出,
- 二进制的3,转换为十进制
- 手写几个作用域链
function test(){ var test = 100; function a(){} function b(){} }
6.今天都复习了之前的什么内容