核心提示:ES6 let和var的四个不同01-作用域只局限于当前代码块02-使用let声明的变量作用域不会被提升03在相同的作用域下不能声明相同的变量04-for循环体现let的父子作用域代码:!doctyp...
ES6 let和var的四个不同
01-作用域只局限于当前代码块
02-使用let声明的变量作用域不会被提升
03在相同的作用域下不能声明相同的变量
04-for循环体现let的父子作用域
代码:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <button>按钮1</button> <button>按钮2</button> <button>按钮3</button> <button>按钮4</button> <button>按钮5</button> <script> //let和const声明变量和常量 var //01-作用域只局限于当前代码块 /* { var str = "张三"; console.log(str); let str1 = "李四"; console.log(str1); } //++++张三,str1 is not defined //let的作用域比var体现的更"明显"一些 console.log("++++" + str) console.log("++++" + str1)*/ //02-使用let声明的变量作用域不会被提升 /* { console.log(str1) //undefined var str1 = "张三"; //上面等同于 var str1; console.log(str1); //undefined str1 = "张三" }*/ //报错“str is not defined” /* { console.log(str) let str = "李四" }*/ //03在相同的作用域下不能声明相同的变量 /* { //不会报错,后面会覆盖前面的 var str1 = "张三"; var str1 = "李四"; console.log(str1); }*/ /* { //报错 "Identifier 'str2' has already been declared" let str2 = "张三"; let str2 = "李四"; console.log(str2) }*/ //04-for循环体现let的父子作用域 // var btns = document.querySelectorAll("button"); /* for(var i = 0; i < btns.length; i++) { // 点击事件是异步,i btns[i].onclick = function () { alert("点击了第"+i+"个按钮"); } }*/ //传统解决思路,闭包 /* for(var i = 0; i < btns.length; i++) { (function (i) { btns[i].onclick = function () { alert("点击了第"+i+"个按钮"); } })(i); }*/ //ES6中直接用let,因为有作用域的概念 /* let btns = document.querySelectorAll("button"); for(let i = 0; i < btns.length; i++) { // 点击事件是异步,i btns[i].onclick = function () { alert("点击了第"+i+"个按钮"); } }*/ //我们再测试一下 /* for(var i = 0; i < 5;i++) { let i = 20; console.log(i); }*/ </script> </body> </html>