最近在学JS,记录一下在学习中遇到的闭包操作。

 

javascript 程序在运行时,变量都会有生命周期,变量在函数体外定义则是全局变量,全局变量,全局都可以调用,安全度不高,且占用资源。如果在函数体内定义则是局部变量,局部变量随函数调用的结束而释放,回归初值。这会相对提高性能,因为局部变量只在调用时才储存值,调用结束自动释放。所以无法连续做计数操作,此时如果把变量定义成全局,则可以实现简单的计数操作。但这样也就暴露了变量,全局变量可以被随处修改,如果程序有很多快构成,快与快之间,如不小心,也容易相互影响变量值。

那如何 既把变量定义在函数体内有能让变量实现连续计数(或连续操作),此刻就要用到闭包。

闭包让变量被内部函数私有,且循环调用内部变量。

----------------------------------------------------------------------------------------------

function count(){



var i=0

i+=1

return i





}

console.log(count()) //--输出为1
console.log(count()) //--输出为1

console.log(count()) //--输出为1
本意是输出1,2,3;却总是输出1.因为i是局部变量。

-------------------------------------------------------------------------
var i=0
function count(){





i+=1

return i





}

console.log(count()) //--输出为1
console.log(count()) //--输出为2

console.log(count()) //--输出为3
i为全局,储存连续值。
---------------------------------------------------------------

闭包:闭包在语法上面就是加上一个function函数包住我们要进行的操作,并把函数返回,返回函数就是返回所有操作,就是让方法连续,这里的连续累加就是一个方法,返回值是储存值连续,让内部变量不会变为初始值。(这是为了自我理解而毫无根据的想法,不做借鉴,只做表达)

结果用return返回。最后把值用一个变量接收。调用时变量(),如函数一样实现调用值。
可以想象很多连续操作都可以这样用,比如连续输出一段序列,比如在前端点击一次按钮进行某个连续操作,可以联想,通过按钮的点击可以实现按钮的颜色连续修改,字体大小的调节,窗口的大小的调节,甚至是数据库的连续取值(这个没多大意义)
就是调用一次函数,出现一次结果,这样许多连续的东西都可以如此操作。数据库里面表格是一行一行连续的,所以自然可以实现调用一次某个函数,数据库里的行,连续展示。
简单运算。
var obj=function count(){

var i=0
return function(){


i+=1

return i



}

}()


console.log(obj())//--输出为1

console.log(obj())//--输出为2

console.log(obj())//--输出为3

-----------------------------------------------------------------