谈谈JS闭包和立即执行函数的理解 您所在的位置:网站首页 js立即执行函数和闭包函数区别 谈谈JS闭包和立即执行函数的理解

谈谈JS闭包和立即执行函数的理解

2024-07-17 16:39| 来源: 网络整理| 查看: 265

什么是闭包(Closure) 内部的函数被保存到外部形成闭包,说的有点太理论话 不多BB直接上代码。 产生一个闭包

创建闭包最常见方式,就是在一个函数内部创建另一个函数。下面例子中的 closure 就是一个闭包:

function fun(){ var a = 1,b = 2; function closure(){ return a+b; } return closure; } console.log(fun()); 闭包的作用域链包含着它自己的作用域,以及包含它的函数的作用域和全局作用域。

第二个例子

这题目 理解 当函数的嵌套形成作用域链时,里面的函数有权访问到外部函数的作用域中的变量函数。

function test(){ var num = 1; function a(){ num ++; console.log(num); } function b(){ num --; console.log(num); } num += 10; //变为了11 return [a, b];

} var arr = test(); // num ==> 11 arr[0]();// 12 让num实现了公有化变量 , 执行a()函数之后num++变为12 arr[1]();// 11 执行完a() 变为12,现在执行b()num--变为11; 闭包的注意事项

通常,函数的作用域及其所有变量都会在函数执行结束后被销毁。但是,在创建了一个闭包以后,这个函数的作用域就会一直保存到闭包不存在为止。

function makeAdder(x) { return function(y) { return x + y; }; }

var add5 = makeAdder(5); var add10 = makeAdder(10);

console.log(add5(2)); // 7 console.log(add10(2)); // 12

// 释放对闭包的引用 add5 = null; add10 = null; add5 和 add10 都是闭包。它们共享相同的函数定义,但是保存了不同的环境。在 add5 的环境中,x 为 5。而在 add10 中,x 则为 10。最后通过 null 释放了 add5 和 add10 对闭包的引用。

在javascript中,如果一个对象不再被引用,那么这个对象就会被垃圾回收机制回收; 如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。

闭包只能取得包含函数中任何变量的最后一个值,这是因为闭包所保存的是整个变量对象,而不是某个特殊的变量

执行函数的理解

在了解执行函数执行之前先搞清楚匿名函数是什么。

匿名函数最大的用途是创建闭包,并且还可以构建命名空间,以减少全局变量的使用。从而使用闭包模块化代码,减少全局变量的污染。

W3C推荐使用的匿名函数 立即执行函数执行完就可以被销毁,节省空间针对初始化功能的函数 (function(){ console.log(‘b’); }()); // ()立即执行的意思

举个例子 function test(a, b, c, d){ console.log(a + b + c + d); }(1, 2, 3, 4);

这是阿里巴巴的一道非常经典的面试题不会报错,也不会被执行。按道理是要报错的,但是语法解析将(1, 2,3);看成了函数表达式。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有