JS閉包的概念。。。這兩個(gè)函數(shù)讓我凌亂了,他們同樣可以返回局部變量,但是我還是分不清區(qū)別在哪

科技 未結(jié) 11 1946
maikochan251
maikochan251 2023-05-26 13:37

function f1(){ var a=1; return a; }

function f1(){ var b=1; function f2(){ return b; } return f2; }

按照閉包的概念:“函數(shù)體內(nèi)的變量可以保存在函數(shù)作用域內(nèi)的特性就叫做閉包”,第二個(gè)才是閉包,但是他們所實(shí)現(xiàn)的結(jié)果是一樣的,他們同樣可以實(shí)現(xiàn)在函數(shù)外面訪問函數(shù)內(nèi)部變量的效果,那么第一個(gè)f1()函數(shù)和第二個(gè)具體的區(qū)別在哪里呢?

11條回答
  •  楚月一劍
    2023-05-26 13:58

    其實(shí) 第一個(gè)也是閉包,第二個(gè)是兩重閉包。。函數(shù)本身就是一個(gè)對象,同時(shí)也是一個(gè)閉包,不信你可以打開調(diào)試功能看一下。對于第二個(gè)函數(shù)中的 f2() 之所以可以訪問 b,是因?yàn)殚]包內(nèi)可以訪問外部變量,閉包在創(chuàng)建時(shí)這些變量就已經(jīng)被保存了。當(dāng)然,外部是不可以訪問閉包內(nèi)部的變量,其實(shí)閉包用多了,自然就習(xí)慣了。

提交回復(fù)