ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] # 1. 函数闭包 闭包就是能够读取其他函数内部变量的函数,由于在 Javascript 语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成 **定义在一个函数内部的函数**。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。 闭包的用途: * 可以在函数外部读取函数内部成员 * 让函数内成员始终存活在内存中 示例: ```js function fn () { var count = 0 return { getCount: function () { console.log(count) }, setCount: function () { count++ } } } var fns = fn() fns.getCount() // => 0 fns.setCount() fns.getCount() // => 1 ``` 思考1: ```js var name = "The Window"; var object = { name: "My Object", getNameFunc: function () { console.log(this); // object return function () { console.log(this); // window return this.name; // 而这里的this是window对象 }; } }; console.log(object.getNameFunc()()); // The Window ``` 思考2: ```js var name = "The Window";   var object = {     name: "My Object", getNameFunc: function () { var that = this; console.log(this); // obeject return function () { console.log(this); // window console.log(that); // object return that.name; }; } }; console.log(object.getNameFunc()()); // My Object ``` # 2. 沙箱 示例1: ```js //沙箱:环境,黑盒,---在虚拟的世界中,模拟真实世界的场景,做实验,实验的结果和真实世界的结果一样,但是不会影响真实的世界 //沙箱可以解决命名冲突的问题 //以后的代码--->尽可能的放在沙箱中 var num=100; //沙箱的代码 (function () { var num=10; // 不与全局的num冲突 num++; console.log(num);//11 })(); console.log(num);//100 ``` 示例2: ```js //沙箱可以解决命名冲突的问题 (function () { var x=10; function f1() { // 与下面的f1不冲突 } }()); (function () { var x=10; function f1() { } }()); ```