JavaScript this绑定规则详解:默认、隐式与丢失
144 浏览量
更新于2024-09-01
收藏 73KB PDF 举报
"本文主要介绍了JavaScript中的this绑定规则,包括默认绑定、隐式绑定、隐式丢失和显式绑定。JavaScript中的this机制是理解和编写JavaScript代码的关键,尤其在处理对象和函数时。"
在JavaScript中,`this`关键字用于表示当前执行上下文的对象,其行为在不同场景下有所不同。以下是JavaScript中`this`的四个绑定规则:
1. 默认绑定:当一个函数独立调用,不处于任何对象上下文时,`this`会默认绑定到全局对象。在浏览器环境中,全局对象通常是`window`;在Node.js中,全局对象是`global`。如果函数在严格模式(`"use strict"`)下运行,`this`则会被绑定到`undefined`,而不是全局对象。
示例:
```javascript
function foo() {
console.log(this.a);
}
var a = 2;
foo(); // 在非严格模式下,输出2
function foo() {
"use strict";
console.log(this.a); // 在严格模式下,输出TypeError:this is undefined
}
```
2. 隐式绑定:当函数被一个对象引用并调用时,`this`会绑定到那个引用它的对象。这种绑定在通过对象属性调用函数时尤为常见。
示例:
```javascript
function foo() {
console.log(this.a);
}
var obj = {
a: 2,
foo: foo
};
obj.foo(); // 输出2,因为foo通过obj调用,this指向obj
```
3. 隐式丢失:在某些情况下,隐式绑定的`this`可能会丢失,转而应用默认绑定规则。例如,当函数引用被赋值给一个新变量后调用,或作为参数传递给其他函数时,原本的上下文对象就会丢失。
示例:
```javascript
function foo() {
console.log(this.a);
}
var obj = {
a: 2,
foo: foo
};
var bar = obj.foo; // 函数别名
var a = "这是全局变量喔";
bar(); // 输出"这是全局变量喔",因为this不再绑定到obj
```
4. 显式绑定:通过`call`、`apply`或`bind`方法可以显式地设置`this`的值。这些方法允许开发者强制`this`指向指定的对象,即使在不适用默认绑定或隐式绑定的情况下。
示例:
```javascript
function foo() {
console.log(this.a);
}
var obj = {
a: 2
};
var a = "全局变量";
var bar = foo.bind(obj);
bar(); // 输出2,因为使用bind显式设置了this为obj
```
理解这四个绑定规则对于编写JavaScript代码至关重要,特别是在处理事件处理程序、闭包和面向对象编程时。正确掌握`this`的用法能避免很多常见的错误和混淆。
2022-10-21 上传
2020-10-17 上传
2020-10-22 上传
2020-10-19 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38537777
- 粉丝: 4
- 资源: 966
最新资源
- JavaScript实现的高效pomodoro时钟教程
- CMake 3.25.3版本发布:程序员必备构建工具
- 直流无刷电机控制技术项目源码集合
- Ak Kamal电子安全客户端加载器-CRX插件介绍
- 揭露流氓软件:月息背后的秘密
- 京东自动抢购茅台脚本指南:如何设置eid与fp参数
- 动态格式化Matlab轴刻度标签 - ticklabelformat实用教程
- DSTUHack2021后端接口与Go语言实现解析
- CMake 3.25.2版本Linux软件包发布
- Node.js网络数据抓取技术深入解析
- QRSorteios-crx扩展:优化税务文件扫描流程
- 掌握JavaScript中的算法技巧
- Rails+React打造MF员工租房解决方案
- Utsanjan:自学成才的UI/UX设计师与技术博客作者
- CMake 3.25.2版本发布,支持Windows x86_64架构
- AR_RENTAL平台:HTML技术在增强现实领域的应用