我我我我终于理解闭包了,哈哈哈哈(仰天长啸)(JavaScript闭包理解)

it2024-12-15  15

想要理解闭包。首先得了解JavaScript中的三个东西。

1,函数内部可以访问的范围。

就是说,函数内部能访问,自身内部以及自身外层的变量。(这个很好理解,大部分语言都是如此)

如:

var a = 1; function myF(){ //这里可以访问a }

函数f1内部有函数f2的话。

var a = 1; function f1{ var b = 2; function f2(){ //这里可以访问a和b } }

 

2,函数自我调用

函数在定义的同时调用自我一次,对外界不可见。外界不能再调用它了。

(funciton(){ //要运行的代码 })(); // 带参数的自我调用函数 (function(a,b){ //... })(1,2)

 

3,JavaScript中,函数Funciton也是对象Object,可以作为返回值

function f1(){ return f2(){}; } var a = f1();//这样a就等于函数f1的返回值即函数f2了 //我们要运行函数f2,就可以这样: a();

 

综上所述,我们想要一个变量,这个变量不能直接被访问,只能通过特定函数访问到。(有点类似于Java自私变量,只能通过get/set方法访问)。

我就需要一个自调用函数,在这个自调用函数中声明(以及初始化)这个变量x。然后再在这个自调用函数中返回一个处理变量x的函数(简称f2吧)。把自调用函数返回的函数f2返回给变量a。然后就可以通过a(),一直调用函数f2,而函数f2作为自调用函数的内部函数,可以一直访问处理自调用函数的变量x。这就是所谓的闭包。

var a = (function(){ var x = 0; return function (){ return x += 1; } })(); a(); // 返回1 a(); // 返回2 a(); // 返回3

闭包是一种保护私有变量的机制。防止外界通过赋值直接去更改他或者覆盖他。

最新回复(0)