首页 > 编程语言 > 详细

JavaScript之闭包

时间:2021-05-18 12:22:37      阅读:12      评论:0      收藏:0      [点我收藏+]

JavaScript作用域:全局作用域、局部作用域(块级作用域)形成的作用域链。

JavaScript变量:全局变量、局部变量。

函数内部可以读取全局作用域下的变量,全局作用域下不能读取到函数内部声明的变量。

要想从函数外部读取到函数局部变量就要使用到闭包知识:

在函数中定义一个子函数(可以访问到父层的变量),并返回该子函数作为函数调用值,这样在函数外就能读取到父函数中声明的变量

function count(){

    var num = 0;
    return function(){

        num += 1;

        console.log(num);

    }

}

var total = count();

total();// 1

total();// 2

闭包可以理解为定义在函数中的子函数,将局部作用域和全局作用域链接的一种方式

使用闭包后局部变量num在函数调用结束后不会清除回收,会保存在内存中,如果程序中过度使用闭包会造成内存消耗大,影响程序性能,在IE浏览器中会导致内存泄露问题,可以在闭包函数调用结束后,将函数置为null,清除内存

一个闭包结合this指针的示例:

var name = ‘hello world‘;

var obj = {

    name: ‘personal‘,

    getName: function(){

        return function(){

            console.log(this.name);

        }

    }

};

var say = obj.getName();// say为返回的匿名函数,此时say为全局变量,this指定调用它的作用域为window,所以调用say指向window.name

say();// hello world

 

var name = ‘hello world‘;

var obj = {

    name: ‘personal‘,

    getName: function(){

        const that = this;// 改变this的指向

        return function(){

            console.log(that.name);

        }

    }

};

var say = obj.getName();

say();// personal

将this赋给了that,在getName调用时,this指向的是调用它的对象obj,所以访问that.name时读取的是obj.name

JavaScript之闭包

原文:https://www.cnblogs.com/it-people/p/14779846.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!