// 输出 7 console.log("my favorite number is: " + MY_FAV);
// 尝试重新声明会报错 const MY_FAV = 20;
// MY_FAV 保留给上面的常量,这个操作会失败 var MY_FAV = 20;
// 也会报错 let MY_FAV = 20;
// 注意块范围的性质很重要 if (MY_FAV === 7) { // 没问题,并且创建了一个块作用域变量 MY_FAV // (works equally well with let to declare a block scoped non const variable) let MY_FAV = 20;
// MY_FAV 现在为 20 console.log('my favorite number is ' + MY_FAV);
// 这被提升到全局上下文并引发错误 var MY_FAV = 20; }
// MY_FAV 依旧为7 console.log("my favorite number is " + MY_FAV);
for (let i = 1; i <= 5; i++) { let item = document.createElement('li'); item.appendChild(document.createTextNode('Item ' + i));
item.onclick = function(ev) { console.log('Item ' + i + ' is clicked.'); }; list.appendChild(item); }
// to achieve the same effect with 'var' // you have to create a different context // using a closure to preserve the value // 要用var关键字实现同样的功能,你不得不使用闭包来维护不同的上下文环境以保护值(不被改变)。 for (var i = 1; i <= 5; i++) { var item = document.createElement('li'); item.appendChild(document.createTextNode('Item ' + i));
(function(i){ item.onclick = function(ev) { console.log('Item ' + i + ' is clicked.'); }; })(i); list.appendChild(item); }