面试题答案
一键面试闭包概念
闭包是指在 JavaScript 中,函数内部可以访问其外部函数作用域中的变量,即使外部函数已经执行完毕,这些变量依然可以被内部函数访问和操作。简单来说,闭包就是函数和其周围状态(词法环境)的组合。
闭包访问外部函数变量示例
function outer() {
var name = 'John';
function inner() {
console.log(name); // 访问外部函数的变量name
}
return inner;
}
var func = outer();
func(); // 输出 'John'
在上述代码中,inner
函数形成了闭包,它可以访问 outer
函数中的变量 name
。即使 outer
函数已经执行结束,name
变量由于被 inner
函数引用(闭包的作用),依然存在于内存中,所以通过 func()
调用 inner
函数时能够正确输出 name
的值。
代码中 this
的指向及原因
在给定的代码:
function outer() {
var num = 10;
function inner() {
console.log(this);
}
inner();
}
outer();
在非严格模式下,this
指向全局对象(在浏览器环境中是 window
对象)。原因是,当 inner
函数被调用时,它是作为一个普通函数直接调用的(inner()
),没有明确指定调用它的对象,所以在非严格模式下,this
默认指向全局对象。
在严格模式下,如果将上述代码放在严格模式中(例如在函数 outer
内部第一行添加 "use strict";
),this
会指向 undefined
。因为在严格模式下,普通函数调用时 this
不会自动指向全局对象,如果没有明确指定 this
的指向,this
就是 undefined
。