2026/4/5 9:07:06
网站建设
项目流程
s网站建设,wordpress主题评论制作,2008建立的php网站慢,宁波seo公司网站推广什么是作用域#xff1f;作用域可以理解为某个变量在某个范围内是可以访问到。var是函数作用域#xff08;声明的函数内#xff09;、全局作用域#xff08;在哪里都可以访问到#xff09;let是块级作用域#xff08;即程序中的大括号{}包含的范围内#xff09;看下面的…什么是作用域作用域可以理解为某个变量在某个范围内是可以访问到。var是函数作用域声明的函数内、全局作用域在哪里都可以访问到let是块级作用域即程序中的大括号{}包含的范围内看下面的例子console.log(---------------------); { var c 100; } console.log(c); { let c 10; console.log(block area , c); } console.log(c); console.log();看以上示例中输出的两个100都是输出的var声明的变量c因为var声明的是函数作用域或全局作用域在这里是全局的所以输出发的时候是100而let声明的是块级作用域即只在大括号内有效{}所以只有在大括号内输出的才是10即使大括号外有输出这个变量也不能输出这个块里面的值。再看下面的例子function test() { for (var i 0; i 10; i) { setTimeout(() { console.log(i); }, 0); } } test(); function test1() { for (var i 0; i 10; i) { (function (index) { setTimeout(function () { console.log(index); }, 0); })(i); } } test1(); function test2() { for (let i 0; i 10; i) { setTimeout(() { console.log(i); }, 0); } } test2();这个有点绕test函数中使用的是var是函数作用域而setTimeout是异步函数for的循环执行完了这里是同步执行的最后i变成了10而setTimeout会在同步函数后执行所以最后输出了函数作用域内的变量i即10.test1函数中也是使用的var但是输出正常这里有一个区别是使用了立即执行函数即内部有一个function这里把var的参数传给了index而index是在这个内部函数作用域内有效这个在书面上理解为捕获了i的值。即把i的值给了index,index是函数作用域内的异步setTimeout执行的时候 输出了内部函数中的index的值。这个是我个人的理解啊有误差的大家可以指正test2函数中使用的是let这个是块级作用域即{}捕获了i的值。可以避免var声明引起的问题。在未来的工作中要尽量使用let。避免出现上面说的问题。