JavaScript学习之闭包

参考

阮一峰

廖雪峰

闭包

变量作用域

限定变量的使用范围,就像是对于一个SAP的产品不同的角色有不同的使用权限;

全局变量

不受作用域范围的影响,可在作用域外访问,也可以在作用域内访问;


JavaScript学习之闭包_第1张图片
图1

局部变量

只能在特定的作用域范围内访问(函数内部);


JavaScript学习之闭包_第2张图片
图2

Note:在作用域(函数内)中声明局部变量要使用关键字var,反之该变量是全局变量;


JavaScript学习之闭包_第3张图片
图3

闭包的定义

外部函数访问一个函数内部变量的函数(局部变量能在它的作用域之外被访问),例如SAP中的RFC(remote function call)外部系统访问SAP内部数据的过程;--在一个函数内部封装一个子函数来存储局部变量,并返回该函数,一遍能在外部访问局部变量;

JavaScript链式作用域

子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。(引自阮一峰)

闭包实现的机理

基于链式作用域的概念,将某个局部变量存储在一个内部函数(可以访问父层函数中的局部变量)中,并将该函数作为函数的返回只值;即可实现 从外部读取内部变量;


JavaScript学习之闭包_第4张图片
图4


闭包的作用

实现局部变量的跨域(从变量作用域之外来访问该局部变量);

缓存局部变量;

你可能感兴趣的:(JavaScript学习之闭包)