(function(){
let foo = 'bar'; // Se crea y se le da un valor
let bar = 'foo'; // Se crea y se le da un valor
console.log('foo: ' + foo);
console.log('bar: ' + bar);
foo = 'foo'; // Se le asigna un nuevo valor
bar = 'bar'; // Se le asigna un nuevo valor
console.log('foo: ' + foo);
console.log('bar: ' + bar);
})()
console.log('foo: ' + foo); // foo is not defined
console.log('bar: ' + bar); // bar is not defined
var bar = 'foo';
let foo = 'bar';
console.log('bar: ' + bar);
console.log('window bar: ' + window.bar);
console.log('foo: ' + foo);
console.log('window foo: ' + window.foo); // undefined
var bar = 'new foo'; // bar puede ser RE DECLARADA
// let foo = 'new bar'; // foo NO PUEDE ser RE DECLARADA
console.log('bar: ' + bar);
console.log('window bar: ' + window.bar);
console.log('foo: ' + foo);
console.log('window foo: ' + window.foo); // undefined
//console.log(letvariable); //--> esto da error
console.log(varvariable); // undefined -> Esto no ya que var hace que estén visibles en su función más próxima
let letvariable = '';
var varvariable = '';
// De igual forma
(function(){
//console.log(x); // -> error
console.log(y); // undefined
let x = 'x';
var y = 'y'
})()
for(let a = 0; a < 9; a++){
}
//console.log(a); // a no esta definida
for(var b = 0; b < 9; b++){
}
console.log(b);
{
let c = 'hello';
var d = 'hello';
}
//console.log(c) // error
console.log(d);
let xx = '';
//let xx = 'xx'; //-> error
var yy = '';
var yy = 'aaaa';
console.log(yy);
const zz = 'aa';
//zz = 'bb'; // error
const objeto = {};
objeto.a = 'aa';
console.log(objeto);
要回答这个问题:
首先,您必须了解每种类型的语句并明确其在 javascript 执行中的范围:
也就是说,例如:
在前面的示例中,可以清楚地看到变量
foo
和bar
只能在内部初始化、访问和更改,closure
但不能在外部访问和/或更改...注意:在前面的例子中,如果你将 a 替换
let
为var
相同的结果,我只是把它作为一个例子,一个更好的例子是说一个let
定义在里面的变量archivo_1.js
不能被访问,archivo_2.js
而一个变量本身可以被访问访问和更改var
archivo_1.js
archivo_2.js
另外需要明确一点,类型变量,
let
不像类型变量, 不能通过全局对象访问,也不能重新声明,不像类型变量,例如:var
window
var
即:
充当类型变量时,
let
必须考虑到它们不能通过全局对象访问window
,也不能重新声明和/或重新分配新值。最后,作为结论,会有一些建议,例如:
1.
let
在函数、循环和其他代码块中使用类型变量,其执行是本地的,不依赖于其他代码,并且所述变量不必通过对象全局访问window
2.使用类型变量
var
,其中所述变量必须在其他代码块中并通过对象全局访问window
,即:var jq = $;
3.使用CONSTANTS (
const
) 获取API KEY、TOKEN、始终必须相同的值等信息,即:const my_credit_card_number = 1234567890;
注意:如果你在,只做上面的例子
nodejs
,哈哈let
和最重要的区别在于var
范围(或范围)。var 将导致定义最近函数内的变量。let 只会在最近的封闭块中定义。无论我们在哪里声明,part var 都会在最近的函数顶部声明变量,这称为提升 ( +info )。let
它也不允许我们创建具有相同名称的变量,尽管它确实允许对其进行修改(与 不同const
)。假设它const
具有相同的效果,let
只是我们不能修改它存储的原始值。是的,我们可以修改对象的属性const
。考虑到这一点,一个或另一个的使用取决于您希望在程序中具有的功能。