1. 什么是闭包? 有什么作用
- 闭包:
一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。闭包的特点:
1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
2. 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
简单来说:闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
-
作用:
1.可以读取函数内部的变量:(如)
0_1482243109358_QQ截图20161220221132.jpg
-
让变量的值保存在内存中:(如)
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_1482252066882_QQ截图20161221003935.jpg
2. 使用闭包封装一个汽车对象,可以通过如下方式获取汽车状态
0_1482252372976_QQ截图20161221004554.jpg0_1482252386076_QQ截图20161221004602.jpg
3. 写一个函数,计算setTimeout平均[备注:新加]最小时间粒度 0_1482253370904_QQ截图20161221010239.jpg
4.下面这段代码输出结果是? 为什么?
0_1482253623877_QQ截图20161221010647.jpg5. 下面这段代码输出结果是? 为什么?
0_1482253732245_QQ截图20161221010840.jpg6.下面这段代码输出?如何输出delayer: 0, delayer:1...(使用闭包来实现)
0_1482254222220_QQ截图20161221011240.jpg0_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);
}
以上内容版权归饥人谷---楠柒所有 如有转载请标明出处
网友评论