ECMAScript 6 引入了许可声明。
我听说它被描述为一个当地变量,但我仍然不确定它是如何行为不同于 var 关键词。
什么是差异?什么时候应该被允许使用而不是 var?
ECMAScript 6 引入了许可声明。
我听说它被描述为一个当地变量,但我仍然不确定它是如何行为不同于 var 关键词。
什么是差异?什么时候应该被允许使用而不是 var?
当前回答
主要差异是范围差异,而让它只能在所宣布的范围内可用,如在圆圈中,可在圆圈之外可访问,例如从MDN的文档(MDN的例子):
function varTest() {
var x = 1;
if (true) {
var x = 2; // same variable!
console.log(x); // 2
}
console.log(x); // 2
}
function letTest() {
let x = 1;
if (true) {
let x = 2; // different variable
console.log(x); // 2
}
console.log(x); // 1
}`
var x = 'global';
let y = 'global';
console.log(this.x); // "global"
console.log(this.y); // undefined
当在区块内使用时,请将变量的范围限制在该区块上。
var a = 1;
var b = 2;
if (a === 1) {
var a = 11; // the scope is global
let b = 22; // the scope is inside the if-block
console.log(a); // 11
console.log(b); // 22
}
console.log(a); // 11
console.log(b); // 2
其他回答
如上所述:
差异是分解. var 被分解到最接近的函数区块,然后被分解到最接近的封锁区块,这可能比函数区块小。
例子1:
在我的两个例子中,我有一个功能 myfunc. myfunc 包含一个变量 myvar 等于 10. 在我的第一个例子中,我检查 myvar 等于 10 (myvar==10). 如果是的话,我 agian 宣布一个变量 myvar (现在我有两个 myvar 变量) 使用 var 关键词并将其分配到一个新的值(20)。
此分類上一篇
例2:在我的第二個例子中,而不是在我的條件區域中使用 var 關鍵字,我宣告 myvar 使用 let 關鍵字. 現在,當我呼叫 myfunc 我得到兩個不同的出口: myvar = 20 和 myvar = 10.
因此,差异很简单,即它的范围。
这篇文章清楚地定义了 var, let 和 const 的区别。
const 是一个信号,识别器不会被重新分配. 让我们,这是一个信号,变量可以被重新分配, 例如,一个字符在一个旋转, 或一个值交换在一个算法. 它也信号,变量将只在区块它是定义的, 这并不总是整个内容函数. var 现在是最弱的信号可用,当你定义一个变量在 JavaScript。
https://medium.com/javascript-scene/javascript-es6-var-let-or-const-ba58b8dcde75#.esmkpbg9b
现在我认为有更好的转换变量到一个区块的声明使用允许:
function printnums()
{
// i is not accessible here
for(let i = 0; i <10; i+=)
{
console.log(i);
}
// i is not accessible here
// j is accessible here
for(var j = 0; j <10; j++)
{
console.log(j);
}
// j is accessible here
}
我认为人们会开始使用Let Here之后,以便他们在JavaScript中与其他语言、Java、C#等类似的分解。
没有对JavaScript的漏洞的明确理解的人早就犯了错误。
Hoisting 不支持使用Let。
在此方法中,在JavaScript中存在的错误正在被删除。
提到ES6在深度:让它更好地理解。
我刚刚遇到了一个使用案例,我不得不使用Var over让介绍新的变量。
我想创建一个新的变量,具有动态变量名称。
let variableName = 'a';
eval("let " + variableName + '= 10;');
console.log(a); // this doesn't work
var variableName = 'a';
eval("var " + variableName + '= 10;');
console.log(a); // this works
上面的代码不起作用,因为 eval 引入一个新的代码区块. 使用 var 的声明将声明这个代码区块之外的变量,因为 var 声明函数范围内的变量。
另一方面,让我们在区块范围内宣布一个变量,因此,一个变量仅在 eval 区块中可见。
使用Let
允许的关键词将变量声明连接到它所包含的任何区块的范围(通常是 {.. } 对),换句话说,允许随意窃取任何区块的范围为其变量声明。
让变量无法在窗口对象中访问,因为它们无法在全球范围内访问。
function a(){
{ // this is the Max Scope for let variable
let x = 12;
}
console.log(x);
}
a(); // Uncaught ReferenceError: x is not defined
当使用VAR
在 ES5 中, var 和 variables 具有函数中的曲线,这意味着在函数内有效,而不是函数本身之外。
function a(){ // this is the Max Scope for var variable
{
var x = 12;
}
console.log(x);
}
a(); // 12
如果你想知道更多,继续阅读下面
最著名的面试问题之一的范围也可能足以准确使用下列;
使用Let
for (let i = 0; i < 10 ; i++) {
setTimeout(
function a() {
console.log(i); //print 0 to 9, that is literally AWW!!!
},
100 * i);
}
当使用VAR
for (var i = 0; i < 10 ; i++) {
setTimeout(
function a() {
console.log(i); //print 10 times 10
},
100 * i);
}
这是因为在使用VAR时,对于每个曲线 iteration,变量被分解并共享副本。