返回

洞悉JS运行机制,解码一道面试难题,让JS更近一步

前端

如果让你遇到一道面试题:

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运行机制的细节,包括变量提升、作用域和函数的返回值等。

解答如下:

  1. 主函数main()的返回值是undefined,这是由于main()函数中没有明确的return语句,所以默认返回undefined。
  2. JS中的函数声明是提升的,这意味着函数声明会在代码执行之前被提升到代码的顶部。因此,在执行main()函数时,变量a已经被声明,但尚未赋值,所以a的值为undefined。
  3. 变量a的值在main()函数中被修改为1,因此打印a的值为1。
  4. JS中没有块级作用域,只有函数作用域和全局作用域。因此,变量a可以在main()函数内和外部访问。
  5. 函数sum()在main()函数内被声明,因此它在main()函数内可见。函数sum()的返回值是a + b,由于a和b都是局部变量,因此它们的值不会被传递到sum()函数中。因此,sum()函数返回的是undefined。
  6. JS中的算术运算符+可以进行字符串拼接,也可以进行数值计算。在sum()函数中,+运算符用于字符串拼接,因此sum()函数返回的是"1 undefined"。

这道面试题考察了JS运行机制的细节,并对理解JS运行机制具有启发意义。希望这道题目对你的JS学习有所帮助。