函数调用、this指向、严格模式以及闭包的介绍
今日重点:
JavaScript高级第03天
一、函数的定义和调用
1、函数的定义方式
(1) 函数声明方式 function 关键字 (命名函数)
function fn(){}
(2)函数表达式(匿名函数)
var fn = function(){}
(3)new Function()
** var fn = new Function('参数1','参数2'..., '函数体')**
fn();
注:Function 里面参数都必须是字符串格式
所有函数都是 Function 的实例(对象)
函数也属于对象
2、函数的调用
二、this
1、函数内部的this指向
2、改变函数内部 this 指向
(1)call方法
call()方法调用一个对象。简单理解为调用函数的方式,但是它可以改变函数的 this 指向
应用场景: 经常做继承. **
(2)apply方法
apply() 方法调用一个函数。简单理解为调用函数的方式,但是它可以改变函数的 this 指向。
应用场景: 经常跟数组有关系
(3)bind方法
bind() 方法不会调用函数,但是能改变函数内部this 指向,返回的是原函数改变this之后产生的新函数
如果只是想改变 this 指向,并且不想调用这个函数的时候,可以使用bind
应用场景:不调用函数,但是还想改变this指向
(4)call、apply、bind三者的异同
共同点 : 都可以改变this指向
不同点:
①call 和 apply 会调用函数, 并且改变函数内部this指向.
②call 和 apply传递的参数不一样,call传递参数使用逗号隔开,apply使用数组传递
③bind 不会调用函数, 可以改变函数内部this指向.
应用场景
①call 经常做继承.
②apply经常跟数组有关系. 比如借助于数学对象实现数组最大值最小值
③bind 不调用函数,但是还想改变this指向. 比如改变定时器内部的this指向.
三、严格模式
1、什么是严格模式
JavaScript 除了提供正常模式外,还提供了严格模式(strict mode)。ES5 的严格模式是采用具有限制性 JavaScript变体的一种方式,即在严格的条件下运行 JS 代码。
2、开启严格模式
(1)为脚本开启严格模式
(2)为函数开启严格模式
3、严格模式中的变化
四、高阶函数
高阶函数是对其他函数进行操作的函数,它接收函数作为参数或将函数作为返回值输出。
此时fn 就是一个高阶函数
函数也是一种数据类型,同样可以作为参数,传递给另外一个参数使用。最典型的就是作为回调函数。**
同理函数也可以作为返回值传递回来
五、闭包
1、变量的作用域复习
变量根据作用域的不同分为两种:全局变量和局部变量。
(1)函数内部可以使用函数外部的变量
(2)函数外部不能使用函数内部的变量
(3)局部作用域:生命周期 --- 从执行函数开始,到执行函数结束,垃圾回收。
(4)全局作用域:声明周期 --- 从页面加载开始,到页面关闭。
2、什么是闭包
闭包(closure) 指有权访问另一个函数作用域中变量的函数。**简单理解就是 ,一个作用域可以访问另外一个函数内部的局部变量。 **
3、闭包的作用
闭包的作用:延伸变量的作用范围。
闭包的本质:沟通
全局作用域 与 局部作用域沟通的一个桥梁。
4、闭包的案例
立即执行函数也称为小闭包因为立即执行函数里面的任何一个函数都可以使用它的i这变量
有关JS构造函数的原型以及继承方法请点击a=href"https://www.cnblogs.com/kk199578/p/14219976.html"