美文网首页JavaScript基础教程程序员
JS(十)闭包、立即执行函数

JS(十)闭包、立即执行函数

作者: StevenTang | 来源:发表于2018-03-08 00:40 被阅读57次

写在最前面

正文开始

//例子

function a() {
    function b(){
        var bbb = 234;
        console.log(aaa)
    }
    var aaa = 123;
    return b;
}

var glob = 100;
var demo = a();
demo();

首先这个函数在执行return b之后,函数就a执行完了,会销毁a的AO,,但是在销毁之前函数b被保存出来了,所以b的执行期上下文并没有被销毁。

所以b的AO、Go都被保存出来了

这样就形成了闭包,也可以这样说:内部函数被保存到了外部,一定形成闭包

function a (){
    var num  = 100;
    function b(){
        num ++;
        console.log(num);
    }
    return b;
}

var demo = a();
demo();//打印101
demo();//打印102

闭包的概念 : 当内部函数保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄漏(内存占用)

内存泄露 : 举个例子....一个杯子...你往里面到的水越多,他的内存越少(同理,你内存占的越多,他的内存越少)

闭包的作用

  • 实现公有变量

    • 函数累加器
  • 可以做缓存(存储结构)

    • eater
  • 可以实现封装,属性私有化

    • Person()
  • 模块化开发,防止污染全局变量

1、累加器上述例子已经写了

2、可以做缓存(存储结构)

function test(){
    var num = 100;
    function a(){
        num ++;
        console.log(num);
    };
    function b(){
        num --;
        console.log(num);
    };
    return [a,b]
}

var myArr = test();

myArr[0]();//打印101
myArr[1]();//打印100
function eater(){
    var food = "";
    var obj ={
        eat : function(){
            console.log("i am eating" + food)
        },
        push : function (myFood){
            food = myFood;
        }
    }
    return obj;
}

var eater1 = eater();

eater1.push('banana');
eater1.eat();
//打印出 i am eating banana

上面的这个例子我在eater1.push('banana')之后就给了eater里面的foot = "",变成了food = "banana"。我在执行eater1.eat()之后就变成了拿到food = "banana" ,他们操作的都是同一个闭包,所以打印出i am eating banana,这个foot就相当于一个隐式的存储结构一样,这个就是缓存的应用

给自己买个坑,属性私有化,在我写完对象之后在解释,模块化开发也一样

立即执行函数

此类函数没有声明,在一次执行后即释放。适合做初始化工作。

function a(){
    
}

function b(){
    
}

我定义两个函数,这两个函数除非等到我JavaScript执行完,否则这两个函数永远都不的释放,永远等待被执行,等待被执行就占空间。

作用 : 针对初始化功能的函数

(function (aaa,bbb,ccc){
    var a = 234;
    var b = 123;
    var c = a+b;
    console.log(c)
    return c
}(1,2,3))

执行完立即被销毁

// 怎么去接收他
var num = (function (aaa,bbb,ccc){
    var a = 234;
    var b = 123;
    var c = a+b;
    console.log(c)
    return c
}(1,2,3))

立即执行函数有两种写法

//第一种
(function(){}());//w3c 建议第一种
//第二种
(function(){})();

扩展

只有表达式才可以被执行符号执行

var test = function (){}()
//也可以被执行

+ function test(){}()
//也可以被执行 以此类推- !号也可以

function test(){
    console.log(a+b+c+d)
}(1,2,3,4)
//不执行也不报错

相关文章

  • JS(十)闭包、立即执行函数

    写在最前面 正文开始 首先这个函数在执行return b之后,函数就a执行完了,会销毁a的AO,,但是在销毁之前函...

  • 理解闭包

    什么是「闭包」。 「闭包」的作用是什么。在一个立即执行函数当中: 首先,假设以上几行代码运行在立即执行函数当中,那...

  • es5核心技术

    立即执行函数 函数提升和变量提升 闭包 this 原型链实现继承

  • javascript立即执行函数和闭包

    闭包 概念:当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链举例分析: 闭包的应用: 立即执行函数 ...

  • js---立即执行函数及闭包

    讲解透彻:https://developer.mozilla.org/zh-CN/docs/Web/JavaScr...

  • 闭包、立即执行函数闭包、BOM

    题目1: 下面的代码输出多少?修改代码让 fnArr[i]()输出i。使用 两种以上的方法 改写1 改写2 题目2...

  • 闭包_定时器

    闭包的作用是:暴露局部函数立即执行函数 ==> 闭包 下面的代码输出多少?修改代码让 fnArri 输出 i。使用...

  • IIFE(Immediately-invoked functio

    一、立即执行函数五花八门的写法: 二、立即执行函数与闭包的暧昧关系 像普通的函数传参一样,立即执行函数也能传参数。...

  • 立即执行函数形成的闭包

    闭包是js中比较难以理解的概念,今天在敲立即执行函数的时候突然有感,稍作分析,聊表心意 闭包的概念简记 阮一峰的一...

  • 立即执行函数和闭包

    立即执行函数: 一、计时器 一次性定时器 setTimeOut(function(){ //1秒后执行 },100...

网友评论

    本文标题:JS(十)闭包、立即执行函数

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