作用域JavaScript变量受作用域限制。如果超出范围,则不能再次使用该变量。这样做的好处是:可以防止当前变量被转换为全局变量有效限制变量的作用域,变量的作用域也会根据声明方式的不同产生不同的作用域:未声明:全局变量var声明:作用域在函数中let,const声明:作用域在{}var声明函数中声明的变量的作用域会被限制在函数的调用栈中,作用域中的变量不能直接从外面得到的。在下面的例子中,fn函数中的变量是无法全局查看的。functionfn(){vara=1;}fn();console.log(a);//无法获取fn函数中的a变量,所以常用“立即函数”来限制变量的作用域,主要是避免产生全局变量。(function(){varb=1;})();console.log(b);//无法获取fn函数中声明的b变量let和const。ES6之后新加入的let和const的作用域和以前一样,都是用{}作为限制作用域的方式,可以让for循环和一些语法避免产生冗余变量影响作用域。与var不同的是,const定义的变量范围仅限于{}。所以本例中的变量c可以从外部取值,而d不可以。{varc=1;constd=1;}console.log(c);//1console.log(d);//UncaughtReferenceError:disnotdefined,cannotgetthevariabledmemorymanagementmechanism每当我们添加一个新的变量,在A位置会占用内存保存它的值,以便在程序后续运行中多次使用。下面的代码会在内存中开辟一块空间a存放数字1的值,vara=1的过程如下:开辟一块内存空间存放变量a,但是还没有赋值(for原因请参考Hoisting),给a赋值。所有变量都会占用内存空间,此外对象的属性、数组、函数参数等也会被同一个概念占用。在调用函数时,每个函数的作用域也会重复占用内存。随着应用程序越来越复杂,如果内存不断被占用而没有适当释放,内存可能会被耗尽。JavaScript引擎有内存回收机制,可以释放不再使用的变量内存。基本概念是:当没有引用指向它时,内存就会被释放。内存释放的验证下面通过一个例子来说明和验证内存释放的机制。首先,使用一个函数生成一个很长的字符串,会占用大量的内存空间。调用randomString函数后会返回一个很长的字符串:functionrandomString(length){varresult='';varcharacters='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';varcharacterscharactersLength=characters.length;for(vari=0;i++
