Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Javascript ES6中没有定义'i'? for(设i=0;i_Javascript - Fatal编程技术网

为什么Javascript ES6中没有定义'i'? for(设i=0;i

为什么Javascript ES6中没有定义'i'? for(设i=0;i,javascript,Javascript,上面的代码是正确的 这就是结果 内部0 内部1 ************** 内部-1 内部0 内部1 当我编写以下代码时,会发生此错误。 为 错误 console.log('inner',i) ^ ReferenceError:未定义i for(设i=0;i

上面的代码是正确的

这就是结果

内部0
内部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
    指的是新实例化的词汇环境中名为
    i
    的变量。但是,由于第2行的词法绑定尚未执行,因此访问此变量是一个错误
说,“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
    指的是新实例化的词汇环境中名为
    i
    的变量。但是,由于第2行的词法绑定尚未执行,因此访问此变量是一个错误

正如@Jai所提到的,
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/您的代码返回
内在的

内部100(您定义了let i=100,在for中使用了第二次迭代,请参见4/)

**************

内在的

测试

  • 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/您的代码返回
内在的

内部100(您定义了let i=100,在for中使用了第二次迭代,请参见4/)

**************

内在的

测试

  • 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:事实上,我之前的回答完全错了。我把它编辑成正确的。我先前的回答完全错了。我把它编辑成正确的。