JS笔记

闭包相关: 闭包——就是函数内部的子函数,每一个子函数都是一个闭包

       闭包一个重点是 立即执行和除了传的参数不让其他参数改变影响内部变量      

     闭包函数运行一次后内部定义的局部变量会被保存在内存中,运行后不销毁,再次运行闭包就接着用内存中的变量

function a(){

var n=1;

b =function(){     //匿名函数b

  alert(n++);

}

c =function(){

  alert(n++);

}

  return b;

}

 

var x = a();  先运行一次外层,所有的内层闭包就都申明了(因为都是全局变量),所以在外部就都可以访问了

c();

 

 

function foo(x) {

    var tmp = 3;

    a=function (y) {   //匿名函数

        alert(x + y + (++tmp));

    }

    return a;

}

var bar = foo(2); 

a(10); //16     然后将内部的tmp改为了4

a(10); //17     继续运行闭包函数,此时++tmp为 ++4是5

 

 

function foo1(x) {   //这里的外层函数不能和上面的同名,不然返回值是 有名函数,覆盖上面的匿名函 数,在a();调用就出错了

    var tmp = 3;

    return function b(y) {

        alert(x + y + (++tmp));

    }

}

var bar = foo1(2); 

// b(10); 错   返回值函数名和函数不一样,返回函数就不能通过函数名调用

bar(10);  // 16

bar(10);  //17

 

 //函数的表现形式

(function(i){  //函数1  等于下面的函数2

  alert(i);

  })(i);

function a(i){ //函数2

  alert(i);

  };

a(i);

原文地址:https://www.cnblogs.com/Jasonellen/p/5777738.html