面试题答案
一键面试函数作用域链概念
在JavaScript中,函数作用域链是一个对象列表,用于在执行代码时解析变量和函数名。当函数被创建时,它会创建一个作用域链,作用域链的顶端是函数的局部作用域(包含函数内部声明的变量和参数),然后依次链接到包含该函数的外部函数的作用域,直到全局作用域。这个链决定了在何处查找变量和函数。
对变量查找和函数返回值的影响
- 变量查找:当在函数中访问一个变量时,JavaScript会首先在函数的局部作用域中查找。如果找不到,它会沿着作用域链向上查找,直到找到该变量或者到达全局作用域(如果在全局作用域也找不到,则会抛出
ReferenceError
)。 - 函数返回值:作用域链也影响函数返回值。如果返回的是一个函数,该返回函数会携带它被定义时所在的作用域链,即使它在其他地方被调用,也能访问到定义时的作用域中的变量。
多层嵌套函数中内部函数访问外部函数变量示例
function outer() {
let outerVar = 'I am from outer function';
function inner() {
return outerVar;
}
return inner;
}
let innerFunc = outer();
console.log(innerFunc());
// 输出: I am from outer function
在上述代码中,inner
函数嵌套在outer
函数内部。inner
函数在访问outerVar
变量时,由于自身局部作用域没有该变量,它会沿着作用域链向上,在outer
函数的作用域中找到outerVar
,并返回其值。即使outer
函数已经执行完毕,inner
函数依然能访问到outerVar
,这是因为inner
函数保留了它被定义时的作用域链。