闭包(closure)指有权访问另一个函数作用域中变量的函数。(官方说法)
简单理解就是 ,定义在一个函数内部的,它可以访问到外部函数的局部变量。
function init() {
var name = "Mozilla"; // name 是一个被 init 创建的局部变量
function displayName() { // displayName() 是内部函数,一个闭包
alert(name); // 使用了父函数中声明的变量
}
displayName();
}
init();
看重点:displayName() 没有自己的局部变量。
然而,因为它可以访问到外部函数的变量,所以 displayName() 可以使用父函数 init() 中声明的变量 name 。
在一些编程语言中,一个函数中的局部变量仅存在于此函数的执行期间。
一旦 init() 执行完毕,你可能会 认为 name 变量将不能再被访问。
闭包的特点
1. 函数嵌套
2. 内部函数使用外部函数作用域内的变量
函数复习:
1.1 函数的定义和调用
函数的定义方式
方式1 函数声明方式 function fn(){}
方式2 函数表达式(匿名函数) var fn = function(){}
方式3 new Function() var fn = new Function('参数1','参数2'..., '函数体')
- 注意 Function 里面参数都必须是字符串格式
- 第三种方式执行效率低,也不方便书写,因此较少使用
- 所有函数都是 Function 的实例(对象)
- 函数也属于对象
1.1.2函数的调用
普通函数的调用--->直接调用
function fn() {
console.log('人生的巅峰');
}
fn();
对象的方法--->对象调用
var o = {
sayHi: function() {
console.log('人生的巅峰');
}
}
o.sayHi()
构造函数-->new 调用
function Star(name,age) {
this.name = name;
this.age = age;
};
new Star();
立即执行函数(IIFE)
(function () { })();
高阶函数
概念:高阶函数是对其他函数进行操作的函数,它接收函数作为参数或将函数作为返回值输出。
- 接收函数作为参数--->回调函数
- 函数作为返回值输出
变量作用域复习
变量根据作用域的不同分为两种:全局变量和局部变量。
- 函数内部可以使用全局变量。
- 函数外部不可以使用局部变量。
- 当局部函数执行完毕,本作用域内的局部变量会销毁。