变量根据作用域的不同分好为两种:局部变量和全局变量。
1,函数内部可以使用全局变量
2,函数外部不可以使用局部变量
3,当函数执行完毕后,本作用域内的局部变量会销毁
闭包:指有权访问另一个函数作用域中变量的函数。
简单理解就是,一个作用域可以访问另一个函数的局部变量。
第一种情况,案例代码:
function fn(){
var num=10;
function fun(){
console.log(num);
}
fun();
}
fn();
fun这个函数作用域访问了另外一个函数fn里的局部变量num,被访问的局部变量所在的函数就是闭包函数,配图如下:
换个说法就是子函数可以使用父函数的局部变量。
第二种情况,案例代码:
function fn(){
var num=10;
function fun(){
console.log(num);
}
return fun;
}
var f = fn();
f();
fn外面的作用域(全局作用域)可以访问fn内部的局部变量。
将fun作为返回值赋值给f,此时f也是一个函数。
总结:闭包的主要作用是延伸了变量的作用范围。
未经允许不得转载:王刚博客 » JS中的闭包及闭包函数的实现