返回
前端this、闭包、作用域,代码深入理解
前端
2023-09-06 03:03:38
什么是this?
this 在 JavaScript 中无处不在。它是函数中的一个特殊对象,代表函数的执行上下文。
this的取值根据函数的调用方式而定。
- 方法调用 :函数作为对象的方法被调用时,this指向该对象。
- 函数调用 :函数作为独立函数被调用时,this指向global对象(浏览器环境中是window对象)。
- 构造函数调用 :函数作为构造函数被调用时,this指向新创建的对象。
- 箭头函数调用 :箭头函数没有自己的this,它总是继承外层函数的this。
什么是闭包?
闭包是指有权访问另一个函数作用域中变量的函数。闭包可以通过函数嵌套来实现。
function outer() {
let count = 0;
function inner() {
count++;
console.log(count);
}
return inner;
}
const fn = outer();
fn(); // 1
fn(); // 2
在这个例子中,inner函数是outer函数的闭包。它可以访问outer函数的作用域,因此可以访问count变量。
闭包的应用很广泛,例如:
- 封装私有变量
- 储存变量(缓存)
- 防抖节流函数的实现
什么是作用域?
作用域是指变量和函数的作用范围。JavaScript有两种作用域:
- 词法作用域 :变量的作用域由它所在的代码块决定。
- 动态作用域 :变量的作用域由函数的调用环境决定。
词法作用域 是JavaScript的默认作用域。在词法作用域中,变量的作用范围仅限于它所在的代码块,包括嵌套的代码块。
function outer() {
let count = 0;
{
let count = 1;
console.log(count); // 1
}
console.log(count); // 0
}
outer();
在这个例子中,inner代码块中的count变量与outer函数中的count变量是不同的变量,因为它们位于不同的作用域中。
动态作用域 在JavaScript中很少使用。在动态作用域中,变量的作用域由函数的调用环境决定。这意味着一个函数的作用域可以访问它的调用者的作用域,依此类推。
总结
- this 关键字代表函数的执行上下文。
- 闭包 是指有权访问另一个函数作用域中变量的函数。
- 作用域 是指变量和函数的作用范围。JavaScript有词法作用域和动态作用域两种作用域。
理解this、闭包和作用域对于编写出可维护、可扩展的代码至关重要。