返回
洞悉JS运行机制,解码一道面试难题,让JS更近一步
前端
2024-02-02 04:16:58
如果让你遇到一道面试题:
function main() {
console.log(a);
var a = 1;
console.log(a);
function sum(a, b) {
return a + b;
}
console.log(sum(a, b)); // 结果是什么?
}
main();
对这道面试题作答时,你首先要做的是弄清楚题目想要考察的知识点。这道题目考察的是JS运行机制的细节,包括变量提升、作用域和函数的返回值等。
解答如下:
- 主函数main()的返回值是undefined,这是由于main()函数中没有明确的return语句,所以默认返回undefined。
- JS中的函数声明是提升的,这意味着函数声明会在代码执行之前被提升到代码的顶部。因此,在执行main()函数时,变量a已经被声明,但尚未赋值,所以a的值为undefined。
- 变量a的值在main()函数中被修改为1,因此打印a的值为1。
- JS中没有块级作用域,只有函数作用域和全局作用域。因此,变量a可以在main()函数内和外部访问。
- 函数sum()在main()函数内被声明,因此它在main()函数内可见。函数sum()的返回值是a + b,由于a和b都是局部变量,因此它们的值不会被传递到sum()函数中。因此,sum()函数返回的是undefined。
- JS中的算术运算符+可以进行字符串拼接,也可以进行数值计算。在sum()函数中,+运算符用于字符串拼接,因此sum()函数返回的是"1 undefined"。
这道面试题考察了JS运行机制的细节,并对理解JS运行机制具有启发意义。希望这道题目对你的JS学习有所帮助。