关于闭包

1. 什么是闭包? 有什么作用

  • 闭包:
      一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。闭包的特点:
     1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
     2. 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
      简单来说:闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
  • 作用:
    1.可以读取函数内部的变量:(如)


    关于闭包_第1张图片
    0_1482243109358_QQ截图20161220221132.jpg
  1. 让变量的值保存在内存中:(如)


    关于闭包_第2张图片
    0_1482243748299_QQ截图20161220222132.jpg

    3.闭包的另一个重要用途是实现面向对象中的对象(如)


    关于闭包_第3张图片
    0_1482247629371_QQ截图20161220232655.jpg

    4.匿名自执行函数
    关于闭包_第4张图片
    0_1482247836051_QQ截图20161220233006.jpg

练习

1.下面的代码输出多少?修改代码让fnArri 输出 i。使用两种以上的方法

关于闭包_第5张图片
0_1482249160153_QQ截图20161220234050.jpg
  • 方法


    关于闭包_第6张图片
    0_1482252006927_QQ截图20161221003916.jpg
关于闭包_第7张图片
0_1482252051902_QQ截图20161221003926.jpg

关于闭包_第8张图片
0_1482252066882_QQ截图20161221003935.jpg

2. 使用闭包封装一个汽车对象,可以通过如下方式获取汽车状态

关于闭包_第9张图片
0_1482252372976_QQ截图20161221004554.jpg

关于闭包_第10张图片
0_1482252386076_QQ截图20161221004602.jpg

3. 写一个函数,计算setTimeout平均[备注:新加]最小时间粒度
关于闭包_第11张图片
0_1482253370904_QQ截图20161221010239.jpg

4.下面这段代码输出结果是? 为什么?

关于闭包_第12张图片
0_1482253623877_QQ截图20161221010647.jpg

5. 下面这段代码输出结果是? 为什么?

关于闭包_第13张图片
0_1482253732245_QQ截图20161221010840.jpg

6.下面这段代码输出?如何输出delayer: 0, delayer:1...(使用闭包来实现)

关于闭包_第14张图片
0_1482254222220_QQ截图20161221011240.jpg

关于闭包_第15张图片
0_1482254229818_QQ截图20161221011538.jpg

关于闭包_第16张图片
0_1482254237207_QQ截图20161221011546.jpg

7. 如何获取元素的真实宽高 :** URL 如何编码解码?为什么要编码? ** 补全如下函数,判断用户的浏览器类型

function trueStyle(element,pseduoElement){
 //IE不支持window.getComputedStyle(),支持element.currentStyle();
return element.currentStyle?element.currentStyle:window.getComputedStyle(element,pseduoElement);
}
let trueWidth = trueStyle(element).width;
let trueHeight = trueStyle(element).height;
let myURL = 'https://www.google.com/#q=javascript';
//如果我们想编码一个URL并且可以使用它(访问),使用encodeURI();
let simpleURL = encodeURI(myURL); //"https://www.google.com/#q=javascript"
//如果我们想编码一个URL并且可以将其放置在某URL的参数中,使用encodeURIComponent();
let completeURL = encodeURIComponent(myURL);
let newURL = 'https://www.google.com/?back=' + completeURL; //"https://www.google.com/?back=https%3A%2F%2Fwww.google.com%2F%23q%3Djavascript"
window.open(simpleURL); //将会打开一个窗口,地址为https://www.google.com/#q=javascript
function isAndroid(){
    return /Android/.test(navigator.userAgent);
}
funcnction isIphone(){
    return /iPhone/.test(navigator.userAgent);
}
function isIpad(){
    return /iPad/.test(navigator.userAgent);
}
function isIOS(){
    return /(iPad)|(iPhone)/i.test(navigator.userAgent);
}

以上内容版权归饥人谷---楠柒所有 如有转载请标明出处

你可能感兴趣的:(关于闭包)