webveuje/zuoye/js/闭包.md
2021-06-03 10:52:41 +08:00

178 lines
2.6 KiB
Markdown

# 闭包
1. 什么是闭包
2. 简述闭包的作用
3. 下面代码的执行结果是什么 为什么
```
function fn1() {
var name = 'iceman';
function fn2() {
console.log(name);
}
fn2();
}
fn1();
```
4. 下面代码的执行结果是什么 为什么
```
function fn1() {
var name = 'iceman';
function fn2() {
console.log(name);
}
return fn2;
}
var fn3 = fn1();
fn3();
```
5. 下面代码的执行结果是什么 为什么
```
function fn1() {
var name = 'iceman';
function fn2() {
console.log(name);
}
fn3(fn2);
}
function fn3(fn) {
fn();
}
fn1();
```
6. 下面代码的执行结果是什么 为什么
```
function waitSomeTime(msg, time) {
setTimeout(function () {
console.log(msg)
}, time);
}
waitSomeTime('hello', 1000);
```
7. 下面代码的执行结果是什么 为什么
```
for (var i = 1; i <= 10; i++) {
setTimeout(function () {
console.log(i);
}, 1000);
}
```
8. 怎么才能在第7题中输出 1-10
9. 下面代码的执行结果是什么 为什么
```
function module() {
var arr = [];
function add(val) {
if (typeof val == 'number') {
arr.push(val);
}
}
function get(index) {
if (index < arr.length) {
return arr[index]
} else {
return null;
}
}
return {
add: add,
get: get
}
}
var mod1 = module();
mod1.add(1);
mod1.add(2);
mod1.add('xxx');
console.log(mod1.get(2));
```
10. 下面代码的执行结果是什么 为什么
```
var a = 10
function foo(){
console.log(a)
}
function sum() {
var a = 20
foo()
}
sum()
```
11. 下面代码的执行结果是什么 为什么
```
var n = 10
function fn(){
var n =20
function f() {
n++;
console.log(n)
}
f()
return f
}
var x = fn()
x()
x()
console.log(n)
```
12. 简述闭包形成的原因
13. 下面代码的执行结果是什么 为什么
```
var a = 0
function foo(){
var b =14
function fo(){
console.log(a, b)
}
fo()
}
foo()
```
14. 下面代码的执行结果是什么 为什么
```
var n = 10
function fn(){
var n =20
function f() {
n++;
console.log(n)
}
return f
}
var x = fn()
x()
```
15. 下面代码的执行结果是什么 为什么
```
var a = '林一一'
function foo(){
var a = 'foo'
function fo(){
console.log(a)
}
return fo
}
function f(p){
var a = 'f'
p()
}
f(foo())
```