# 作用域-作用域链-闭包

setTimeout(function() {
    console.log(a);
}, 0);

var a = 10;

console.log(b);
console.log(fn);

var b = 20;

function fn() {
  setTimeout(function() {
    console.log('setTImeout 10ms.');
  }, 10);
}

fn.toString = function() {
    return 30;
}

console.log(fn);

setTimeout(function() {
    console.log('setTimeout 20ms.');
}, 20);

fn();

// 打印
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function a() {
  console.log('11111111111')
}
a.toString = function() {
  console.log('22222222222222')
  return 3000
}
1
2
3
4
5
6
7
function foo() {
  var a = 10
      b = 20
  function bar() {
    console.log('a+b=', a + b)
  }
  return bar
}
1
2
3
4
5
6
7
8
for (var i = 1; i < 5; i++) {
  console.log('i===', i)
}
for (var i = 1; i < 5; i++) {
  (function (val) {
    setTimeout(() => {
      console.log('i===', val)
    }, 0)
  })(i)
}
1
2
3
4
5
6
7
8
9
10
for ( var i=1; i<=5; i++) {
	setTimeout(() => {
		console.log( i );
	}, i*1000 );
}
1
2
3
4
5
for ( var i=1; i<=5; i++) {
  ((j) => {
    setTimeout(() => {
      console.log( j );
    }, j*1000)
  })(i)
}
1
2
3
4
5
6
7
for ( let i=1; i<=5; i++) {
	setTimeout(() => {
		console.log( i );
	}, i*1000 );
}
1
2
3
4
5