理解js闭包

闭包的概念: 闭包就是能够读取其他函数内部变量的函数。
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。
所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

闭包的用途:闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

面试中笔试题1:

for (var i = 1; i <= 5; i++) {

  setTimeout( function timer() {

      console.log(i);

  }, 1000 );

}

上面的代码会输出什么?怎么改动上述代码,使其依次输出1、2、3、4、5

答案是 后面每隔1000毫秒输出一个6

如何理解:
凡是类试for循环中嵌套一个方法\color{red}{该方法不是立即执行的}都会将其存入内存中,等待for循环执行完毕再一次执行该嵌套方法,非闭包下for循环每次到得 i 就立即释放 此时完毕 i 理应为5 然而闭包下变量的值始终保持在内存中,i执行到5时还要再去执行一次 i++用于判断 i <= 5的条件 此时 i 就等于6了,此时 console.log(i)中的 i 是从内存中读取的

如何输出使其依次输出1、2、3、4、5让其立即执行

for (var i = 1; i <= 5; i++) {

 (function(i){

            setTimeout( function timer() {

                console.log(i);

            },  1000 );

        })(i);
}

或使用块级作用域--关键字let

for (let i = 1; i <= 5; i++) {

  setTimeout( function timer() {

      console.log(i);

  }, 1000 );

}

面试中笔试题2:

 function foo(x) {
       var tem=3;
       return function (y) {
           alert(x+y+(++tem))
       }
   }

   var bar=foo(2);
   bar(10);  //16

理解:

var bar=foo(2);等效于

  var tem=3;
  var bar=function (y) {
           var  x=2;
           alert(x+y+(++tem))
       }

bar(10);等效于:

  var tem=3;
  var y=10
  var bar=function (y) {
           var  x=2;
           alert(x+y+(++tem))
     }
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容