javaScript--浅谈闭包
Posted 赵皖华
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaScript--浅谈闭包相关的知识,希望对你有一定的参考价值。
作用域就不说了,先来理解一个概念:作用域链
当定义一个函数时,它实际上保存一个作用域链。
当调用这个函数时,它创建一个新的对象来存储他的局部变量,并将这个对象添加至保存的那个作用域链上,同时创建一个新的更长的表示函数调用作用域的‘链’。
下面来举个栗子:
var scope = ‘G scope‘;
function checkscope(){
var scope = ‘L Scope‘;
function f(){
return scope;
}
return f();
}
checkscope(); // ‘L Scope’
var scope = ‘G scope‘;
function checkscope(){
var scope = ‘L Scope‘;
function f(){
return scope;
}
return f;
}
checkscope()(); // ‘L Scope‘
function checkscope(){
var scope = ‘L Scope‘;
function f(){
return scope;
}
return f();
}
checkscope(); // ‘L Scope’
var scope = ‘G scope‘;
function checkscope(){
var scope = ‘L Scope‘;
function f(){
return scope;
}
return f;
}
checkscope()(); // ‘L Scope‘
简单来说, 定义 f 时候生成 的 作用域链保存了当前作用域的所有对象,包括 var scope = ‘L Scope’; 这个局部变量。
函数定义时的作用域链到函数执行时依然有效。这句话就是闭包的精髓了。
以上是关于javaScript--浅谈闭包的主要内容,如果未能解决你的问题,请参考以下文章