1 call
obj.call(改变this指向的对象,参数1,参数3) 参数可选
1.1 call 第一可调用函数 第二可以改变函数的this指向
1.2 call 的主要作用他可以实现继承
继承
function Father(user,age,sex){
this.user=user;
this.age=age;
this.sex= sex;
}
function Son(uset,age,sex){
Father.call(this,uset,age,sex);
}
var son =new Son('123',18,'nan')
apply
fun.apply(thisArg,[argsArray]);
thisArg:在fun函数运行时指定的this
artgsArray:船体的值,必须要包含在数据里
返回值就是函数的返回值,应为它要调用函数。
bind
bind()方法不会调用函数,但是能改变函数内部this指向。
fun.bind(thisArg,arg1,arg2,...)
thisArg:在fun函数运行时指定的this
arg1,arg2 传递的其他参数
-
返回由指定的this之后初始化参数改造的原函数拷贝。
call apply bind 总结
- call apply 会调用函数,并改变函数内部this指向
- call apply 传递的参数不一样,call 传递阐述arg1,arg2形式。apply必须是数组的形式。
3.bind 不会调用函数,可以变函数内部的this指向。
主要应用
1.call 主要做继承、
2.apply 经常和数组相关,比如借助数学对象实现数组最大值,最小值。
3.bind 不调用 函数,但是还想改变this指向。比如改变定时器内部的this 指向
严格模式
ES5在IE10 以上的版本才会被支持。
-
消除了javascript 语法的一些不合理、不严谨之处,减少了一些怪异行为
2.消除了一些不安全的地方
3.提高变异效率
4.为未来语法的javascript 做好了铺垫
严格模式的开启
1.为脚本开启严格模式
直接写 'use strict'
2 为函数开启严格模式
在指定的函数中写 ‘use strict’
3 严格模式的变化
1 . 变量 变量必要要先声明后使用
2 . 不能删除已经申明好的变量。
3 . 以前全局作用下this 指向的是window ,在严格模式下执行的undefined。
4 . 以前构造函数不加new 可以直接调用,在严格模式下必须要new一下。
5.定时器this 还是指向window
6.事件、对象还是指向调用者。
严格模式下函数变化
1 . 不能定义相同的形参。
2 . 函数必须声明在顶层。
高阶函数
高阶函数是对其他函数进行操作的函数。它接收函数作为参数或将函数作为返回值输出。
下面就是将函数作为参数
fn(function(){
alert{'hi'};
}
闭包
闭包:指有权访问另一个函数作用域中变量的函数。
闭包的作用:延伸了变量的作用范围。
下面代码在fun函数中访问了fn函数中的变量num fn 函数就是闭包。
浅拷贝和深拷贝
浅拷贝只拷贝一层,更深层次对象级别的只拷贝引用】
-
深拷贝是多层的,每一层都会拷贝
3.在ES6中可以直接使用Object.assign浅拷贝(要拷贝成的对象,拷贝的对象)Object.assign(o,obj);
深拷贝