178 lines
2.6 KiB
Markdown
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())
|
|
|
|
``` |