美文网首页
JS 闭包(Closure)

JS 闭包(Closure)

作者: Klart | 来源:发表于2018-09-17 10:27 被阅读109次

参考阮一峰老师的JS 闭包

理解闭包前需要理解变量作用域、变量提升

JS作用域

先来看一下一道题目
<ul>
  <li>选项1</li>
  <li>选项2</li>
  <li>选项3</li>
  <li>选项4</li>
  <li>选项5</li>
  <li>选项6</li>
</ul>
/变量提升了,var item;var i;/

var item =document.querySelectorAll('li')

for (var i=0;i<item.length;i++){
  items[i].onclick=function(){
  console.log(i);
}
}

点击li依次打印出来什么?
答案:每次打印都是6
原因:变量提升了;i是全局变量;

那如何让它依次打印,12345呢;

因为i是全局变量,所以首先需要把i变为局部变量;
for (var i=0;i<item.length;i++){
  var temp=function(j){
   items[j].onclick=function(){
    console.log(j);
}
}
temp(i)
}
这样打印的话就是依次打印123456

现在来说说闭包:

  function f1(){

    var n=999;

    function f2(){
      alert(n); 
    }

    return f2;

  }

  var result=f1();

  result(); // 999
这样就是一个闭包;
闭包的作用就是暴露局部变量;

芳芳理解闭包
闭包

相关文章

  • php之闭包函数(Closure)

    php闭包函数(Closure) JS闭包 js和php闭包使用和区别

  • js经典题目

    1闭包 链接:学习Javascript闭包(Closure) setTimeout在js单线程中只是放在队列中并未...

  • JS 闭包(Closure)

    参考阮一峰老师的JS 闭包 理解闭包前需要理解变量作用域、变量提升 JS作用域 那如何让它依次打印,12345呢;...

  • JS 闭包(Closure)

    JavaScript 变量可以是局部变量或全局变量。私有变量可以用到闭包。 简单点说闭包就是JS中用来实现私有变量...

  • 关于rust中的闭包(一)

    闭包 在计算机中,闭包 Closure, 又称词法闭包 Lexical Closure 或函数闭包 functio...

  • 关于闭包

    闭包的英文是closure,又称词法闭包(Lexical Closure)和函数闭包(Function Closu...

  • 详解js闭包

    详解js闭包 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实...

  • 理解闭包

    闭包 何为闭包 闭包(Closure)是词法闭包(Lexical Closure)的缩写 高级程序设计中写有权访问...

  • python之闭包与装饰器

    1 闭包 维基百科给出的解析:闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭...

  • 闭包,定时器

    问题 1.什么是闭包? 有什么作用 闭包(英语:Closure),又称词法闭包(Lexical Closure)或...

网友评论

      本文标题:JS 闭包(Closure)

      本文链接:https://www.haomeiwen.com/subject/nyztnftx.html