为什么Javascript ES6中没有定义'i'? for(设i=0;i
上面的代码是正确的 这就是结果 内部0为什么Javascript ES6中没有定义'i'? for(设i=0;i,javascript,Javascript,上面的代码是正确的 这就是结果 内部0 内部1 ************** 内部-1 内部0 内部1 当我编写以下代码时,会发生此错误。 为 错误 console.log('inner',i) ^ ReferenceError:未定义i for(设i=0;i
内部1
**************
内部-1
内部0
内部1 当我编写以下代码时,会发生此错误。
为 错误 console.log('inner',i)
^ ReferenceError:未定义i
for(设i=0;i<2;i++){
console.log('inner',i);//未定义i
设i=100;
}
console.log('***************');
i=-1;
如果(i<2){
console.log('inner',i);//未定义i
设i=100;
i=i+1;
如果(i<2){
console.log('inner',i);
i=i+1;
如果(i<2){
console.log('inner',i);
i=i+1;
}否则{
返回;
}
}否则{
返回;
}
}
说,“让和const声明定义作用于运行执行上下文的词汇环境的变量。这些变量是在实例化其包含的词汇环境时创建的,但在计算变量的词汇绑定之前,不能以任何方式访问。”
当街区
for (let i = 0; i < 2; i ++){
console.log('inner',i); // i is not defined
let i = 100;
}
console.log('**************');
i =-1;
if( i < 2) {
console.log('inner',i); // i is not defined
let i = 100;
i = i +1;
if( i < 2){
console.log('inner',i);
i = i +1;
if( i < 2){
console.log('inner',i);
i = i +1;
} else {
return ;
}
} else {
return ;
}
}
已执行:
- 第0行:词汇环境被实例化,这意味着变量
在该点被创建i
- 第1行:这里使用的
指的是新实例化的词汇环境中名为i
的变量。但是,由于第2行的词法绑定尚未执行,因此访问此变量是一个错误i
for (let i = 0; i < 2; i ++){
console.log('inner',i); // i is not defined
let i = 100;
}
console.log('**************');
i =-1;
if( i < 2) {
console.log('inner',i); // i is not defined
let i = 100;
i = i +1;
if( i < 2){
console.log('inner',i);
i = i +1;
if( i < 2){
console.log('inner',i);
i = i +1;
} else {
return ;
}
} else {
return ;
}
}
已执行:
- 第0行:词汇环境被实例化,这意味着变量
在该点被创建i
- 第1行:这里使用的
指的是新实例化的词汇环境中名为i
的变量。但是,由于第2行的词法绑定尚未执行,因此访问此变量是一个错误i
let
关键字仅在创建它的块范围内定义。让我们看看您的代码:
{ // 0
console.log('inner',i); // 1
let i = 100; // 2
}
正如@Jai所提到的,
let
关键字仅在创建它的块范围内定义。让我们看看您的代码:
{ // 0
console.log('inner',i); // 1
let i = 100; // 2
}
- 1/不能在函数外使用return
- 2/让我们在局部范围内定义一个变量。您无法从for循环外访问i
- 3/您的代码返回
- 4/正如MDN所说,在使用throw ReferenceError后定义let变量。
var i = 0;
for ( ; i < 2; i ++){
console.log('inner',i);
i = 100;
}
console.log('**************');
i =-1;
if( i < 2) {
console.log('inner',i);
i = 100;
i = i +1;
if( i < 2){
console.log('inner',i);
i = i +1;
if( i < 2){
console.log('inner',i);
i = i +1;
} else {
return ;
}
} else {
return ;
}
}
for(设i=0;i<2;i++){
console.log('inner',i);
}
console.log('***************');
变量i=-1;//用var而不是无定义i,导致i=未定义
如果(i<2){
console.log('inner',i);
i++;//增量快捷方式
如果(i<2){
console.log('inner',i);
i++;
如果(i<2){
console.log('inner',i);
i++;
}
}
}
- 1/不能在函数外使用return
- 2/让我们在局部范围内定义一个变量。您无法从for循环外访问i
- 3/您的代码返回
- 4/正如MDN所说,在使用throw ReferenceError后定义let变量。
var i = 0;
for ( ; i < 2; i ++){
console.log('inner',i);
i = 100;
}
console.log('**************');
i =-1;
if( i < 2) {
console.log('inner',i);
i = 100;
i = i +1;
if( i < 2){
console.log('inner',i);
i = i +1;
if( i < 2){
console.log('inner',i);
i = i +1;
} else {
return ;
}
} else {
return ;
}
}
for(设i=0;i<2;i++){
console.log('inner',i);
}
console.log('***************');
变量i=-1;//用var而不是无定义i,导致i=未定义
如果(i<2){
console.log('inner',i);
i++;//增量快捷方式
如果(i<2){
console.log('inner',i);
i++;
如果(i<2){
console.log('inner',i);
i++;
}
}
}
让
有一个块作用域,所以我猜声明在log之后,所以这是不明确的。每当谈到Javascript和ECMA标准时,重要的是要注意实现。您使用什么来运行javascript?(它是基于网络的吗?我们可以期待Chrome与V8一起使用吗?我们使用Rhino吗?)这可能会有帮助:那么你认为i=100有什么好处呢,让
有一个block作用域,所以我猜声明在log之后,所以这是不明确的。每当谈到Javascript和ECMA标准时,重要的是要注意实现。您使用什么来运行javascript?(它是基于网络的吗?我们可以期待Chrome与V8一起使用吗?我们使用Rhino吗?)这可能会有帮助:那么你认为让i=100做什么好呢?@Jai:事实上,我之前的回答完全错了。我把它编辑成正确的。我先前的回答完全错了。我把它编辑成正确的。