Javascript 在这种情况下,它会生成100个不同的实例变量(JS与C+;+;)?

Javascript 在这种情况下,它会生成100个不同的实例变量(JS与C+;+;)?,javascript,c++,scope,Javascript,C++,Scope,我记得: C++: for(int i= 0; i< 100;i++) { int number= 3; } 它会生成100个不同的变量吗?或者我们只需要一个名为number的变量,其值为3。 我的意思是这些变量实际花费了多少内存 如果for循环不是由函数()包装的{},那么循环产生变量的内存的机制是什么 好的,这是基本类型变量。如果变量是对象,它会不同吗 与C不同,JavaScript中的变量是函数范围的,因此您正在重用相同的变量: 只创建一个变量 如果它没有包装在函数中,

我记得:
C++:

for(int i= 0; i< 100;i++)
{
   int number= 3; 
}
  • 它会生成100个不同的变量吗?或者我们只需要一个名为number的变量,其值为
    3

    我的意思是这些变量实际花费了多少内存

  • 如果for循环不是由
    函数()包装的{}
    ,那么循环产生变量的内存的机制是什么

  • 好的,这是基本类型变量。如果变量是对象,它会不同吗


  • 与C不同,JavaScript中的变量是函数范围的,因此您正在重用相同的变量:

  • 只创建一个变量
  • 如果它没有包装在函数中,
    number
    将是全局的,但仍然只创建一次
  • 价值观并不重要。变量始终是函数作用域

  • C编译器也应该重用number变量的位置。。。对于javascript循环:在第一次执行后,我们有一个变量
    number
    ,但在第二次执行时,它还没有循环使用~在第二次执行中,它再次执行相同的操作。为什么我们没有100个变量?@Eric Jablow我知道了。每次声明数字时,它将分配一个内存空间,并在每次执行中循环使用。(块范围)。因此,无论执行多少次,总有一个整数变量称为
    number
    ,但我们不能再在循环外使用
    number
    。我说得对吗?对了一半。编译器完全可以在堆栈上创建一个内存位置,并将其用于变量编号。记住:默认情况下,局部变量不会初始化;这就是为什么。编译器不必每次通过循环都将数字重置为0。但是变量编号在循环外是不可见的,并且您无法在另一个迭代中获得一个迭代的编号变量的值。编译器可以做它想做的事情,只要编译器之外没有任何东西会注意到。事实上,您可能需要查看汇编代码;编译器可能会完全放弃循环。当编译器读取方法的代码时,它会找到其中的所有变量,以及它们的名称、类型和作用域。它不计算循环执行的次数;为什么要这样做?它将在编译时为变量分配空间,而不是在运行时。您没有使用
    new
    malloc
    。由于number的两个实例不会同时存在,因此只需要为一个实例分配空间。然后,它进行优化。如果在这个C++中加入一个相同的循环,用数字2表示,它可以知道数字和数字2可以重用它们的空间。变量“number”的作用域正好是
    {int number=3}
    ,即它将在每次循环迭代中创建和销毁一次。销毁后,它的内存可以重用(并且将被任何编译器重用)。因此,它不会占用一个变量100倍的内存。
    for(var i=0; i < 100 ;i++)
    {
        var number= 3;
    }