我试图理解JS的作用域。在这里我有一个示例,该示例在全局范围内有一个变量。check
我的意思是说真值1
。然后在一个名为main
whichdoesn't have a variable called check
但有一个if statement
which检查是否存在检查变量的函数中,在其上重新分配另一个值以检查变量。然后将其打印出来。如果我使用
if(check){}
它打印未定义。在这里我有一些问题:
1. check变量在全局范围内声明。这意味着它可以在任何地方访问。那么即使IF statement
失败,它也应该打印全局分配的值1而不是undefined。为什么它打印undefined而不是1?
2. main函数范围没有检查变量。如果在main函数的范围内找不到check时,为什么在全局范围内找不到它?
(function(){
var check=1;
function main(){
if(check){
var check=10;
}
document.write(check);
}
main();
})();
JavaScript仅具有功能范围,并且称为提升。函数内部的每个变量声明都放在函数的开头。因此,您的代码等效于
var check=1;
function main(){
var check; // = undefined
if(check){ // block doesn't create scope
check=10;
}
document.write(check);
}
局部变量check
遮盖了外部变量check
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句