闭包

一、概念

字面意思:封闭和包裹

函数中:它会形成一个封闭包裹的环境,函数内部声明的变量函数外部无法访问到。

闭包:计算机科学中定义的闭包,函数本身以及函数所处的环境(作用域链)构成的一个综合体叫做闭包。函数就是闭包,函数会形成一个闭包。

二、函数基础回顾

1、如果一个函数没有返回值,此时获取函数的返回值是:undefined

2、如果一个函数有返回值:

如果return后面什么都没有,此时返回值是:undefined

返回值的类型可以是:string number boolean array object……

3、为什么要返回值:就是要获取函数内部声明的变量

4、为什么不在全局环境声明一个变量,而是在函数体内部声明,

三、闭包要解决的问题:在函数外部访问函数内部的内容

四、缓存

作用: 

思路:计算的时候先去容器里面查询一下是否有这个数字对应的值,如果有,直接拿过来用,如果没有,先计算,计算完成后存到容器中去

1CDN:内容分发网络

练习题

1、用自己的话简述属性 变量 的搜索原则

属性搜索原则:

   先在对象本身找,再去原型中找,如果找不到就undefined  

变量搜索原则

     首先在当前链上找:如果有则停止查找;如果没有在n-1级上找(在函数内部允许访问定义在函数外部的变量);

      如此往复,直到0级链

如果找到,则结束寻找,直接获得该链接上变量的数据,如果还没有抛出异常。

   

 

 

2、什么是静态成员?什么是实例成员

静态成员:和构造函数相关的属性或方法;实例成员:由构造函数创造出来的对象相关

 

3JavaScript中的作用域是_词法_作用域

 

4、怎么理解JavaScirpt中的作用域?__

Js中的作用域是词法作用域,在定义函数时就已经定义下来了。词法作用域的含义?

 

5、代码

var arr = [{name:"张三"},

{name:"李四"},

{name:"王五"},

{name:"赵钱"},

{name:"孙李"} ];

for (var i = 0; i < arr.length; i++) {

arr[i].show = function () {

console.log(arr[i].name);

};

}

// 根据以上代码分析以下情况的结果:

// 情况一:

for (var i = 0; i < arr.length; i++) {

arr[i].show();

// 正确的结果     

}

的执行结果是多少?

结果:张三 李四 王五 赵钱孙李

// 情况二:

for (var j = 0; j < arr.length; j++) {

arr[j].show();

}

的执行结果是多少?

结果:报错

 

 

6、使用一句话总结什么是闭包?

一个封装包裹的环境。