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 };