Javascript内存节省-if语句变量声明
如果变量驻留在不执行的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'); } }
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
,变量将永远不会被赋值,也不会有任何要进行垃圾收集的内容,当函数返回时,它们将从堆栈中清除。