Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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内存节省-if语句变量声明_Javascript_Variables_Memory_If Statement - Fatal编程技术网

Javascript内存节省-if语句变量声明

Javascript内存节省-if语句变量声明,javascript,variables,memory,if-statement,Javascript,Variables,Memory,If Statement,如果变量驻留在不执行的if语句中,是否会初始化/存储在内存中,如下所示: function blah(){ if(something === true){ var blahOne = 1; var blahTwo = 2; var blahThree = 3; } else { console.log('The above if statement usually won\'t execute'); } }

如果变量驻留在不执行的if语句中,是否会初始化/存储在内存中,如下所示:

function blah(){
    if(something === true){
        var blahOne = 1;
        var blahTwo = 2;
        var blahThree = 3;
    } else {
        console.log('The above if statement usually won\'t execute');
    }
}

我的假设是否定的,但至少可以说Javascript是一种古怪的语言。提前感谢您的帮助

所有
var
声明都被移动到函数顶部,并初始化为未定义。这就是所谓的变量提升。JavaScript没有块作用域,只有函数和全局作用域

您的代码相当于以下代码

function blah(){
    var blahOne, blahTwo, blahTree;
    if(something === true){
        blahOne = 1;
        blahTwo = 2;
        blahThree = 3;
    } else {
        // blahOne, blahTwo, blahThree are set to undefined
        console.log('The above if statement usually won\'t execute');
        // But since they have been declared, there's no error in reading them
        console.log(blahOne, blahTwo, blahThree);
    }
}

Javascript中没有类似于
块作用域的东西。看这个。如果您想这么说:Javascript具有函数作用域。所以你的问题的答案是
它们被初始化。

它们被初始化了,但不是
1,2,3
,最好说它们被声明了,但没有初始化,因为如果
有什么!==是的,我没那么说。我只是说:它们被初始化,必须被垃圾收集。^我对提升的一般概念很熟悉,但实际上对你刚才说的很好奇。不确定这些值是否与声明一起被提升。@SC_Chupacabra在代码的那一部分中看到我的评论如果
something!==如果
有什么东西,它们不必被垃圾收集true
,变量将永远不会被赋值,也不会有任何要进行垃圾收集的内容,当函数返回时,它们将从堆栈中清除。