// 立即执行的函数表达式 IIFE
for(var i = 0; i < 20; i ++) {
void function(i){
var div = document.createElement("div");
div.innerHTML = i;
div.onclick = function(){
console.log(i);
}
document.body.appendChild(div);
}(i);
}
// 不用 IIFE 时,会得到 i===20
for(var i = 0; i < 20; i ++) {
var div = document.createElement("div");
div.innerHTML = i;
div.onclick = function(){
console.log(i);
}
document.body.appendChild(div);
}
// 当然,现在用 let 关键字就能解决
for (let i = 0; i < 20; i++) {
let div = document.createElement("div");
div.innerHTML = i;
div.onclick = function () {
console.log(i);
}
document.body.appendChild(div);
}
const a = 2;
if(true){
console.log(a); //抛错
const a = 1;
} // 在 if 的作用域,const 声明仍然是有预处理机制
console.log(foo); // 有值了
function foo(){
}
console.log(foo);
if(true) { // 如果出现在 if 等语句中时,
function foo(){
}
}
// 在声明前使用,会报错
console.log(c);
class c{
}
var c = 1;
function foo(){
console.log(c); // ReferenceError: Cannot access 'c' before initialization
class c {}
}
foo();