在JavaScript中,let 和 var 都是新闻稿表达式的URL,但它有许多差别。
表达式返回值相同采用 var 新闻稿的表达式是表达式级返回值,而采用 let 新闻稿的表达式是块级返回值。
以 var 新闻稿表达式为例:
function test() { var x = 1; if (true) { var x = 2; console.log(x); // 输入 2 } console.log(x); // 输入 2 }在下面的范例中,采用 var 新闻稿的表达式 x 在表达式外部的任何人地方性都是由此可见的。在 if 句子块中表述的表达式 x 与表达式外部表述的表达式 x 十分,在控制面板中输入了2。
再上看呵呵 let 的范例:
function test() { let x = 1; if (true) { let x = 2; console.log(x); // 输入 2 } console.log(x); // 输入 1 }由于采用了 let 新闻稿表达式, x 在 if句子块中和表达式外部都是相同的表达式,这两个表达式的返回值相同。在控制台上输入了2和1。
表达式新闻稿提升相同JavaScript 中的表达式提升是指表达式可以在新闻稿之前采用。
采用 var 新闻稿的表达式会被提升到表达式开头的位置,所以在表达式外部的任何人地方性都可以采用该表达式。
采用 let新闻稿的表达式不会被提升,所以在新闻稿之前采用该表达式会导致ReferenceError 错误。
例如:
console.log(testVar); // 输入 undefined var testVar = 1; console.log(testLet); // Uncaught ReferenceError: testLet is not defined let testLet = 1;由于表达式 testVar 会被提升, console.log 句子可以执行,但其值为 undefined。而采用 let 新闻稿的表达式 testLet 在新闻稿之前采用会导致 ReferenceError 错误。
同一返回值内同名表达式处理在同一返回值内采用 var 或 let 新闻稿同名表达式会产生相同的结果。
采用 var 新闻稿同名表达式会覆盖之前新闻稿的同名表达式,说明表达式可以被重复新闻稿和赋值,而采用 let 新闻稿的同名表达式会被视为语法错误。
例如:
var x = “Hello”; var x = “World”; // 不会报错 console.log(x); // 输入 “World” let y = “Hello”; let y = “World”; // 会报错:Uncaught SyntaxError: Identifier y has already been declared console.log(y);由于表达式 x 是采用 var 新闻稿的,重复新闻稿会被视为合法的,因此这段代码能够正常执行。而采用 let新闻稿表达式y 时,在同一返回值内再次新闻稿同名表达式会被视为错误。
总之,采用 let 和 var 新闻稿表达式的差异在于:表达式的返回值,表达式新闻稿提升和同一返回值内同名表达式的处理方式相同。