关于闭包

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

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


    0_1482243109358_QQ截图20161220221132.jpg
  1. 让变量的值保存在内存中:(如)


    0_1482243748299_QQ截图20161220222132.jpg

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


    0_1482247629371_QQ截图20161220232655.jpg

    4.匿名自执行函数
    0_1482247836051_QQ截图20161220233006.jpg

练习

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

0_1482249160153_QQ截图20161220234050.jpg
  • 方法


    0_1482252006927_QQ截图20161221003916.jpg
0_1482252051902_QQ截图20161221003926.jpg

0_1482252066882_QQ截图20161221003935.jpg

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

0_1482252372976_QQ截图20161221004554.jpg

0_1482252386076_QQ截图20161221004602.jpg

3. 写一个函数,计算setTimeout平均[备注:新加]最小时间粒度
0_1482253370904_QQ截图20161221010239.jpg

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

0_1482253623877_QQ截图20161221010647.jpg

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

0_1482253732245_QQ截图20161221010840.jpg

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

0_1482254222220_QQ截图20161221011240.jpg

0_1482254229818_QQ截图20161221011538.jpg

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);
}

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文章著作权归饥人谷_Lyndon和饥人谷所有,转载请注明出处。 闭包对于我而言是一个难点,但闭包又是一个很有用的...
    HungerLyndon阅读 1,082评论 1 3
  • 1.什么是闭包? 有什么作用 闭包指有权访问另一个函数作用域的变量的函数。创建闭包的常见方式 是 在一个函数...
    JunVincetHuo阅读 1,422评论 0 2
  • 卡尔维诺中文站留言板这个帖子专门用作卡尔维诺中文站的留言板,欢迎大家留言和提问。...阮一峰2007-01-04T...
    舟渔行舟阅读 331评论 0 1
  • 最近开始学习JavaScript闭包,这个概念对我而言着实有点难懂,看了视频理解也不是很深刻。在四处查找相关资料后...
    _李杨阅读 364评论 0 0
  • 每个人与简书相遇的方式都不一样,但有一个共同点,大家要么有阅读的爱好,要么有写作的爱好。我与简书的邂逅是个偶然...
    编织装点生活阅读 246评论 5 3