面试题答案
一键面试变量提升机制
在JavaScript中,变量提升是指在函数作用域或全局作用域内,变量和函数声明会被提升到其所在作用域的顶部,而不是按照它们在代码中出现的顺序执行。这意味着变量和函数声明在声明之前就可以被使用。
变量声明和函数声明在变量提升上的区别
-
变量声明:使用
var
声明的变量会提升到作用域顶部,但不会提升初始化。即变量可以在声明之前使用,值为undefined
。console.log(x); // 输出 undefined var x = 5;
-
函数声明:函数声明会被提升到作用域顶部,包括函数体。所以函数可以在声明之前调用。
greet(); // 输出 "Hello, world!" function greet() { console.log("Hello, world!"); }
而函数表达式不会被提升,因为它是在赋值语句中,赋值语句不会被提升。
greet(); // 报错:greet is not a function
var greet = function() {
console.log("Hello, world!");
};
综上所述,函数声明的提升比变量声明更完整,函数声明不仅提升声明,还提升函数体,而变量声明仅提升声明,不提升初始化。