MST

星途 面试题库

面试题:JavaScript 中函数作用域与块级作用域的区别示例考查

请举例说明 JavaScript 函数作用域和块级作用域的不同,并解释在以下代码中变量的访问情况: ```javascript function test() { var a = 1; if (true) { let b = 2; console.log(a); } console.log(b); } test(); ```
15.5万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 函数作用域和块级作用域的不同
    • 函数作用域:在JavaScript中,函数作用域意味着在函数内部声明的变量在整个函数内都可以访问。例如:
function func() {
    var x = 10;
    function innerFunc() {
        console.log(x); // 可以访问到外部函数func中的变量x
    }
    innerFunc();
}
func();
  • 块级作用域:块级作用域由{}界定,在ES6引入letconst之前,JavaScript没有真正的块级作用域。例如使用var声明的变量在块级作用域内不会被限制:
if (true) {
    var y = 20;
}
console.log(y); // 可以访问到变量y,值为20

而使用letconst声明的变量具有块级作用域:

if (true) {
    let z = 30;
}
console.log(z); // 报错,z is not defined,因为z的作用域限制在if块内
  1. 分析给定代码中变量的访问情况
    • test函数中,var a = 1;声明了一个具有函数作用域的变量a。在if块内可以访问到a,因为if块在test函数内部,所以console.log(a);会输出1
    • let b = 2;声明了一个具有块级作用域的变量b,其作用域限制在if块内。当执行到console.log(b);时,已经超出了b的作用域,所以这行代码会报错,提示b is not defined

总结:上述代码执行时,console.log(a);会正常输出1,而console.log(b);会导致错误,因为b在其块级作用域之外不可访问。