JavaScript 中的函数作用域是指:变量在声明它的函数体以及这个函数体嵌套的任意函数体内都是有定义的。这意味着,在函数体内声明的所有变量在整个函数体内始终是可见的,这种特性也被称为“声明提前”,即,函数内声明的所有变量(不涉及到赋值)都被提前至函数的顶部声明。
比如,查看如下代码:
function test() {
console.log(x);
var x = 10;
console.log(x);
}
test();
上述代码运行,将先输出 undefined,再输出 10。
这是因为,虽然变量 x 在第二行声明并赋值,但其有效范围为整个函数体,因此,第一行代码输出时,表示变量 x 已经声明但是没有赋值,因此输出 undefined;第三行代码运行时,因为变量 x 已经赋值为 10,则输出 10。