我目前正在研究JavaScript中的变量和范围(来自Kyle Simpson的YDKJS系列),我想我理解编译器如何为变量a
"分配内存。如果遇到var a;
等显式变量声明,则在适当的范围内。我的问题是:在函数声明的情况下,例如函数foo(a) {...};
如果a
还没有在其他地方被声明为变量,编译器是否会声明"该变量是否存在于函数的范围内?或者是a
"不存在"直到调用函数foo(3);
并为a
分配值?
对不起,如果这不相关或太基本了。我正在努力完全掌握范围和变量声明的概念,这是我通过做一些研究无法回答或找到的东西。
提前致谢!
答案 0 :(得分:2)
是的,命名函数参数是一个类似于var a
的声明。输入范围(在本例中为函数范围)时,将为所有声明的变量保留内存。然后使用传递的参数(3
)初始化 - 如果没有传递参数,则使用undefined
。
答案 1 :(得分:1)
a
不会被分配。你的第二个猜测是正确的。