网站宣传的方法主要有,一个网站的建设流程有哪些资料,在线做网站索引,有个可以做图片的网站在开始介绍let和const变量声明前#xff0c;有必要先了解下JavaScript里的var变量声明。var变量声明全局声明var声明在函数体外#xff0c;所声明的变量为全局变量。var name 张三;var所声明的全局变量会作为window的一个属性#xff0c;可以使用.…在开始介绍let和const变量声明前有必要先了解下JavaScript里的var变量声明。var变量声明全局声明var声明在函数体外所声明的变量为全局变量。var name 张三;var所声明的全局变量会作为window的一个属性可以使用.来引用。如上例的name引用console.log(window.name)注意非严格模式下声明在函数体内的变量把声明语句的var去掉那么所声明的变量也是全局变量。作用域var变量声明的最大特点是它的作用域为声明语句所在的最近函数体内。示例function f() {var message Hello, world!;return message;}var所声明的message变量的作用域范围就是在函数f内。var声明变量的作用域为函数体的全部隐含着两个主要问题变量提升和循环内变量共享。变量提升变量提升JavaScript会把函数内的变量声明提升到函数的最顶部。示例function(){var aa;var bb;var cc;}等同于function(){var a,b,c;aa;bb;cc;}这样看是貌似没有问题想一下下面的例子输出结果var messagemessage 1;(function(){console.log(message)var message message 2;})()很多人可能会认为控制台输出的结果是message 1。执行一下会发现输出的结果为undefined。这是因为变量提升了。上面的例子实际等同于var messagemessage 1;(function(){var message;console.log(message)message message 2;})()变量提升有它的优势但也常常给我们带来一些难以发现的bug。循环内变量共享直接看示例for (var i 0; i setTimeout(function() { console.log(i); }, 100 * i);}我们期待的输出结果为依次为0,1,2,3,4,5,6,7,8,9而实际输出结果都为10。这是因为在循环内共享了变量ii自增到10结束setTimeOut()里的函数还没有调用当调用函数时i值为10所以输出的结果都为10。为了解决循环内变量共享可以考虑使用IIFE。for (var i 0; i (function(i) {setTimeout(function() { console.log(i); }, 100 * i);})(i);}重复声明在上面的例子var messagemessage 1;(function(){console.log(message)var message message 2;})()message是允许重复声明的重复声明的变量会覆盖之前声明的变量。let变量声明let是ES6新增的特性也是为了解决var变量声明所存在的一些问题可以说let是更完美的var。基本用法let varName 变量值;示例let name 张三这是和var声明变量类似。注意如果let变量声明在全局它并不会像var声明的变量一样成为window的一个属性。作用域let变量声明和var最大的不同点就是变量的作用域不一样。var为函数作用域而let变量声明的为块作用域(block-scoping)。块作用域会把声明的变量限定在代码块(如使用{}括起来的代码库)或者for循环内而不是整个函数体。function f(input: boolean) {let a 100;if (input) {let b a 1;return b;}// 出错: b属于上面的代码块定义的在代码块外不能使用。return b;}let声明的变量不允许在声明前使用这样解决了var变量提升引起的问题。(function(){console.log(message); //此处会报错Uncaught ReferenceError: message is not definedlet message my message;})()对于循环内的变量每次循环都会是捕获值的副本作为运算而不是共享同一个值解决了var循环内共享变量的问题。所以前面for循环的例子只需把var改为let即可for (let i 0; i setTimeout(function() { console.log(i); }, 100 * i);}重复声明let是不允许在同一作用域内重复声明重复声明会报error: cant re-declare x in the same scope。function f(x) {let x 100; // error: interferes with parameter declaration}function g() {let x 100;var x 100; // error: cant have both declarations of x}const变量声明const变量声明和let类似但如它的名字所寓意它定义的是常量包含了两层意思声明的的变量不能被重复赋值const声明变量是必须立刻赋值const numLivesForCat 9;numLivesForCat 10; //重复赋值错误const name; //错误声明时没有赋值name 张三;对于const声明的对象对象本身是不能被赋值覆盖但是对象的可修改属性是允许被修改值的。const numLivesForCat 9;const kitty {name: Aurora,numLives: numLivesForCat,}// Errorkitty {name: Danielle,numLives: numLivesForCat};// all okaykitty.name Rory;kitty.name Kitty;kitty.name Cat;kitty.numLives--;