美文网首页
浅谈javascript闭包概念及常见问题

浅谈javascript闭包概念及常见问题

作者: 是归人不是过客 | 来源:发表于2018-04-03 21:39 被阅读20次

1,闭包:闭包是指有权访问另一个函数作用域的变量的函数。

2,闭包的一般形式

function f1(){

function f2(){}

    return f2

}

3,举例

例一,

function f1(){

var name="tom001",age=18,isgroup=false;

    function f2(){

return "i am f2 function";

    }

return f2;

}

//alert(f1());// function f2(){return "i am f2 function"; }

// alert(f1().f2);//undefined

//调用内部函数

alert(f1()());//i am f2 function

或者

var ff=f1(); //ff=f2;

ff();

例二,

function f1(){

var name="tom001",age=18,isgroup=false;

function f2(){

return "i am f2 function-"+name;

}

return f2;

}

alert(f1()());//i am f2 function -tom001

例三,

function f1(){

var age=18,isgroup=false;

  function f2(){

var nn="tom001"

      return nn;

  }

// console.log(f2());

  return f2;

  }

//想得到nn值

  alert(f1()());  //tom001

4,闭包例题

例题一

var arr=new Array();

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

arr[i]=function () {

alert(i);

}

}

arr[0]();

arr[1]();

arr[2]();

arr[3]();

arr[4]();

//5,5,5,5,5

为什么不是1,2,3,4,5

因为在完成循环后i的值已经是5了(for循环中的i是全局变量),调用arr[0](),arr[0](),arr[1]()......时会调用全局变量i,所以输出时会是5,5,5,5,5

解决方法

var arr=new Array();

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

arr[i]=f1(i)

}

function f1(n){

       functionf2(){

         alert(n)

     }

    return  f2;

}

arr[0]();//f1()=f2;f1()=arr[];arr[]()=f1()()=f2();

arr[1]();

arr[2]();

arr[3]();

arr[4]();

原因:i被传到f1()函数中时,这是的 i 即n已经不是全局变量了,而是在闭包环境下的i了。

例题二

document.body.innerHTML='<div id="div1">aaa</div>'

+<div id=“div2”>bbb</div>+<div id="div3">ccc</div>

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

  docment.getElementById('div'+i).addEventListener('click',function(){

     alert(i);   //all are4

   })

}

解决方法

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

   !function(i){

        docment.getElementById('div'+i).addEventListener('click',function(){

          alert(i);   //all are4

      }

}

相关文章

  • 浅谈javascript闭包概念及常见问题

    1,闭包:闭包是指有权访问另一个函数作用域的变量的函数。 2,闭包的一般形式 function f1(){ fun...

  • 浅谈 JavaScript 闭包

    相信学习 JavaScript 的同学都知道「闭包(Closure)」,这个概念在 JavaScript 中是非常...

  • 浅谈JavaScript闭包

    闭包就是指一个有权访问另外一个函数作用域中的变量的函数。--《JavaScript高级程序第三版》 本人对于闭包初...

  • JavaScript闭包浅谈

    一.闭包 1、什么是闭包 闭:闭合,关闭,封闭。包:包裹,包起来。一个具有封闭的对外不公开的, 包裹结构, 或空间...

  • JavaScript----闭包

    javascript之闭包 闭包的概念     闭包(closure)是 JavaScript 的一种语法特性。 ...

  • 学习JavaScript闭包和作用域笔记

    JS JavaScript闭包和作用域 闭包 JavaScript高级程序设计中对闭包的定义:闭包是指有权访问另外...

  • javascript中闭包是什么

    javascript中闭包是什么 JavaScript 变量可以是局部变量或全局变量。私有变量可以用到闭包。闭包就...

  • Javascript 闭包

    闭包 (注:所以案例以 javascript 实现) 初识闭包 什么是闭包 MDNClosures are fun...

  • 浅谈Javascript中的闭包

    在学习Javascript脚本语言的路上,闭包一直困惑着每一个刚接触这门语言的程序猿。 ——存在的即是合理的。首...

  • 浅谈JavaScript中的闭包

    闭包是指有权访问另一个函数作用域中的变量的函数,个人认为闭包最大的用处就是防止对全局作用域的污染。 试想如果我们把...

网友评论

      本文标题:浅谈javascript闭包概念及常见问题

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