1、表达式覆盖范围
当他们在表达式内部表述表达式时,那些var表达式归属于自上而下覆盖范围。比如:
var counter;在此例中,counter是两个自上而下表达式。这意味著该counter表达式能被任何人表达式出访。
当他们采用URL在表达式内新闻稿表达式时var,表达式的覆盖范围是局部性的。比如:
function increase() { var counter = 10; } // cannot access the counter variable here在那个范例中,counter表达式是increase()表达式的局部性表达式。它无法在表达式以外出访。
下列实例在循环式内表明从 0 到 4 的五个位数,在循环式外表明位数 5。
for (vari =0; i < 5; i++) { console.log(“Inside the loop:”, i); } console.log(“Outside the loop:”, i);输入:
Inside the loop: 0 Inside the loop: 1 Inside the loop: 2 Inside the loop: 3 Inside the loop: 4 Outside the loop: 5在此实例中,i表达式是自上而下表达式。因此,能从循环式内部和for循环式之后出访它。
下列实例采用letURL而不是varURL:
for (let i = 0; i < 5; i++) { console.log(“Inside the loop:”, i); } console.log(“Outside the loop:”, i);在这种情况下,代码在循环式中表明了从 0 到 4 的五个位数和两个引用错误:
Inside the loop: 0 Inside the loop: 1 Inside the loop: 2 Inside the loop: 3 Inside the loop: 4错误:
Uncaught ReferenceError: iis not defined由于此实例采用letURL,因此该表达式i是阻塞覆盖范围。这意味著该表达式i仅存在并且能在for循环式块内出访。
在 JavaScript 中,两个块由一对花括号分隔,{}就像在if…elseandfor语句中一样:
if(condition) { // inside a block } for(…) { // inside a block }2、创建自上而下属性
自上而下var表达式作为属性添加到自上而下对象中。自上而下对象位于Web 浏览器和Node.js 上:windowglobal
var counter = 0; console.log(window.counter); // 0但是,let表达式不会添加到自上而下对象中:
let counter = 0; console.log(window.counter); // undefined3、重新新闻稿
varURL允许他们重新新闻稿表达式而不会出现任何人问题:
var counter = 10; var counter; console.log(counter); // 10但是,如果他们用letURL重新新闻稿两个表达式,他们会得到两个错误:
letcounter =10; let counter; // error4、时间死区
let 表达式有时间死区,而 var 表达式没有。为了理解时间死区,让他们检查一下 var 和 let 表达式的生命周期,它们有两个步骤:创建和执行。
var 表达式
在创建阶段,JavaScript 引擎将存储空间分配给 var 表达式,并立即将它们初始化为 undefined。
在执行阶段,JavaScript 引擎将分配指定的值分配给 var 表达式(如果有的话)。否则, var 表达式保持未表述。
有关详细信息,请参阅执行上下文。
let表达式
在创建阶段,JavaScript 引擎为 let 表达式分配存储空间,但不初始化表达式。引用未初始化的表达式将导致 ReferenceError。
let 表达式与 var 表达式具有相同的执行阶段。
时间死区从块开始,直到处理了 let 表达式新闻稿。换句话说,它是在表述之前无法出访 let 表达式的位置