1 for(var i = 0; i < 10; i++) {
2 setTimeout(function() {
3 console.log(i); //输出10个10,因为setTimeout方法是异步的,当执行到setTimeout时,for循环已经执行完毕,i变量值为10
4 }, 1000);
5 }
1 for (var i = 0; i < 10; i++) {
2 (function(a) {
3 // 变量 i 的值在传递到这个作用域时被复制给了 a,
4 // 因此这个值就不会随外部变量而变化了
5 setTimeout(function() {
6 console.log(a); //输出0 1 2 3 4 5 6 7 8 9
7 }, 1000);
8 })(i); // 我们在这里传入参数来"闭包"变量
9 }
1 //声明式函数定义语句属于顶级作用域范围,函数调用语句可写在函数声明语句之前:
2 add(1, 2);//3
3 function add(m, n) {
4 alert(m + n);
5 }
6
7
8 //函数表达式定义的函数在定义之前无法调用:
9 //TypeError: add is not a function
10 add(1, 2);
11 var add = function(m, n) {
12 alert(m + n);
13 };