什么是闭包,变量的作用域和自执行函数


作用域和闭包以及自执行函数

作用域

作用域分为2种

1、全局作用域

全局作用域就是在js的任何位置都能访问过

2、函数作用域

只能在函数里面调用的称之为函数作用域

闭包

嵌套在函数里面的函数及周边的变量叫闭包

闭包存在的问题是:周边变量不会被释放,常驻内存中
闭包的缺点:消耗内存

下面我们做一个闭包的示例

在函数中我们调用另一个函数,让第二个函数
/闭包
function test(){
    var b = 2;
   return function(){
        var c = 3;
        console.log(b);
    }
}
var new1 = test();
new1();
打印结果得到的是2
下面我们在调用一次new1()
function test(){
    var b = 2;
    return function(){
        var c = 3;
        console.log(b);
    }
}
var new1 = test();
new1();  new1();
打印的结果是2 2
由此我们得到一个结论,我们要想打印下面这个函数的结果,我们就用闭包做
function test(){
    var b = 2;
}
var new1 = test();
new1();
我们刚才说到闭包存在的问题是:周边变量不会被释放,常驻内存中下面我们举例说明
function test(){
    var b = 2;
   return function(){
        b++            
        console.log(b);
    }
}
var new1 = test();
new1();new1(); 
打印的结果是3 4
我们在调用一个函数
function test(){
    var b = 2;
   return function(){
        b++            
        console.log(b);
    }
}
var new1 = test();
new1();new1(); new1();
现在的输出结果是 3 4 5

自执行函数(立即执行函数)

自执行函数有2中写法

//第一种写法
(function (){
    console.log(1);
})();
//第二种写法
(function (){
    console.log(2)
}()); 
自执行函数也是也是一个闭包
var aa =  (function (){
    var a = 55;
    function test(){
        a++;
        console.log(a);
    }
    return test;
})();
aa();aa();
打印结果56 57

以上就是变量作用域和闭包以及自执行函数的介绍


发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>