1.自定义函数(命名函数)
function fn(){}
2.函数表达式(匿名函数)
var fun =funciton(){}
3.利用new Function('参数1','参数2','函数体') //执行效率差
this指向
普通函数 定时器函数 立即函数 this指向window
构造函数 this指向对象
对象的方法函数 绑定事件函数 this指向调用者
改变this指向
call() 方法
语法:fun.call(指向谁,参数1,参数2)
apply()
语法 fun.apply(指向谁,[传递的值]) //传递的值必须写在数组里面
apply的主要应用 利用apply借助于数学内置对象求最大值等
bind()
语法:fun.bind(指向谁,参数1,参数2) //不会调用原函数 返回值为原函数改变this指向后的新函数
严格模式 //IE10以上支持
为整个脚本开启严格模式 写在<script>标签里面写 'use strict'
为某个函数开启严格模式 写在要开启的函数里面写 'use strict'
严格模式规定
变量规定:
1.变量名必须声明才能使用
2.声明的变量不能删除
this指向问题:
1.严格模式下全局作用域中函数this指向undefined 不是window
2.构造函数不加new调用,this报错 实例化后this指向实例对象
3.定时器 this 指向还是window 事件,对象还是指向调用者
函数变化:
1.函数名中不能有重名的参数
2.不允许在非函数代码块中声明函数 例if{} for{}
高阶函数-函数作为参数传递
闭包 有权访问另一个函数作用域中变量的函数
一个作用域可以访问另一个函数的局部变量
主要作用:延伸了变量的作用范围
递归函数自己调用自己 类似于for循环 必须有退出条件 return
浅拷贝
浅拷贝只拷贝一层,更深层次对象级别的只拷贝引用 对原来的数据会有影响
Object.assign(要拷贝的文件,要拷贝谁)
深拷贝
深拷贝拷贝多层 每一级别的都拷贝 对原来的数据不会有影响