this用法总结

news2025/8/7 16:40:53

文章目录

      • 1.常规下this的指向
        • 1.1 全局环境中的this
        • 1.2 上下文对象调用中的this
        • 1.3 this指向绑定事件的元素
        • 1.4 箭头函数的this指向
      • 2. 改变this指向
        • 2.1 call - Function.prototype.call( )
          • 2.1.1 call的第一个参数
          • 2.1.2 call接受多个参数
          • 2.1.3 调用对象的原生方法
        • 2.2 apply - Function.prototype.apply( )
          • 2.2.1 apply 与call 的区别
          • 2.2.2 利用apply传入数组的特性,实现一些小功能
        • 2.3 bind - Function.prototype.bind( )
          • 2.3.1 bind传入一个参数时
          • 2.3.1 bind传入多个参数时
          • 2.3.2 第一个参数为null或undefined时
          • 2.3.3 bind使用时的注意点(即:使用bind的几个场景)
            • 2.3.3.1 bind每一次返回一个函数
            • 2.3.3.2 将包含 *this* 的方法直接当作回调函数
            • *2.3.3.3 结合call的使用
        • 2.4 手写call、bind、apply
      • 3.总结

1.常规下this的指向

this关键字可以用在构造函数之中,表示实例对象。除此之外还可以用在别的场合。但是不管是什么场合,this都有一个共同点:它总是返回一份对象

1.1 全局环境中的this

函数在浏览器全局环境下被简单调用,在非严格模式下 this 指向 window,在通过 use strict 指明严格模式的情况下指向 undefined
例1:

function f1() {
    console.log(this);
}

function f2() {
    'use strict'
    console.log(this);
}

f1()     // window or global
f2()     // undefined

例2:

const foo = {
    bar : 10,
    fn : function(){
        console.log(this); 
        console.log(this.bar); 
    }
}
var fn1 = foo.fn;
fn1();

// window or global
// undefined

虽然fn函数在foo对象中作为该对象的一个方法,但是赋值给fn1之后,fn1仍然是在window的全局环境下执行的。因此this指向的还是window

例3:

const foo = {
    bar : 10,
    fn : function(){
        console.log(this); 
        console.log(this.bar); 
    }
}
foo.fn();   


// { bar: 10, fn: [Function: fn] }
// 10

这里,this指向调用它的对象,在foo.fn() 语句中,this指向的是foo对象

1.2 上下文对象调用中的this

一般通过上下文对象调用函数时,函数体内的 this 会被绑定到该对象上。
例4:

const student = {
    name: 'zhangsan',
    fn: function () {
        return this;
    }
}
console.log(student.fn() === student); 


// true

this 指向当前的对象student

在嵌套关系中,this指向最后调用它的对象
例5:

const student = {
    name: 'zhangsan',
    son: {
        name: 'zhangxiaosan',
        fn: function () {
            return this.name
        }
    }
}
console.log(student.son.fn()); 

// zhangxiaosan

高阶-例6:

const o1 = {
    text: 'o1',
    fn: function () {
        return this.text;
    }
}

const o2 = {
    text: 'o2',
    fn: function () {
        return o1.fn();
    }
}

const o3 = {
    text: 'o3',
    fn: function () {
        var fn = o1.fn;
        return fn();
    }
}

console.log(o1.fn()); 
console.log(o2.fn());
console.log(o3.fn());

 // o1
 // o1
// undefined

o1.fn() this指向调用它的对象,打印为o1;
o2.fn() this 指向为o1,打印为o1;
o3.fn() 这里是将o1.fn 赋值给fn,并return,所以在调用的时候,相当于全局调用function () { return this.text; },并不是以对象的形式调用,this指向window,所以打印为undefined

1.3 this指向绑定事件的元素

问题:在一个div节点的时间函数内部,有一个局部的callback方法,我们希望callback方法内部的this指向div节点

<div id="div1">我是一个div</div>


window.id = 'window';
document.getElementById('div1').onclick = function(){
  console.log('this1',this.id); 
  const callback = function(){
    console.log(this.id); 
  }
  callback();
}

在这里插入图片描述

由于callback作为普通函数被调用,所以this指向为window

解决: 通过变量保存的方式

window.id = 'window';
document.getElementById('div1').onclick = function(){
  console.log('this1',this.id); // div1
  const that = this; // 保存当前 this 的指向
  const callback = function(){
    console.log(that.id); 
  }
  callback();
}

在这里插入图片描述

1.4 箭头函数的this指向

箭头函数中的this 指向始终是指向的外层作用域(箭头函数没有自己的this, 它的this是继承而来; 默认指向在定义它时所处的对象(宿主对象),此处指父级作用域)

var x = 20;
const obj = {
    x: 10,
    test: () => {
        console.log(this); // {}
        console.log(this.x); // undefined
    }
}
obj.test();

在这里插入图片描述

箭头函数的 this 指向与普通函数不一样,它的 this 指向始终是指向的外层作用域。所以这里的 this 实际上是指向的全局对象。

var name = "JavaScript";
const obj = {
    name: "PHP",
    test: function () {
        const i = function () {
            console.log(this.name);
            // i 是以函数的形式被调用的,所以 this 指向全局
            // 在浏览器环境中打印出 JavaScript,node 里面为 undeifned
        }
        i();
    }
}
obj.test(); // JavaScript

// 改为箭头函数:

var name = "JavaScript";
const obj = {
    name : "PHP",
    test : function(){
        const i = ()=>{
            console.log(this.name);
            // 由于 i 为一个箭头函数,所以 this 是指向外层的
            // 所以 this.name 将会打印出 PHP
        }
        i();
    }
}
obj.test();// PHP

另外箭头函数 不能作为构造函数

const Test = (name, age) => {
    this.name = name;
    this.age = age;
};
const test = new Test("xiejie", 18);
// TypeError: Test is not a constructor

2. 改变this指向

2.1 call - Function.prototype.call( )

call方法可以指定this指向(即函数执行时所在的作用域),然后在指定的作用域中执行函数。

// 函数.call(对象)
fun.call(thisArg, arg1, arg2, ...)
2.1.1 call的第一个参数

thisArg:在 fun函数运行时指定的 this值 。如果参数为空或 null、undefind,则默认传参全局对象,同时值为原始值(数字,字符串,布尔值)的 this会指向该原始值的自动包装对象。
例1:改变this指向

var obj = {};
var f = function(){
	return this;
};
console.log(f() === window);  
console.log(f.call(obj) === obj) 

执行f() 时,因为在全局 环境下执行,所以this指向window,通过call 传入第一个参数,call前面的函数执行时,this指向为第一个参数对象

例2:this指向传入undefined 、null

var n = 123;
var obj = { n: 456 };

function a() {
  console.log(this.n);
}

a.call() // 传入空,指向全局 ,123
a.call(null) //传入null 指向全局, 123
a.call(undefined) //传入undefined, 123
a.call(window) // 123
a.call(obj) //传入obj,this指向obj 456

例3: 传入Number类型,this指向包装对象

var f = function () {
  return this;
};

f.call(5); // Number {[[PrimitiveValue]]: 5}

在这里插入图片描述

2.1.2 call接受多个参数

第一个参数是 this 指向的对象,之后的是函数回调所需的参数
例4:

function add(a, b) {
  return a + b;
}

add.call(this, 1, 2) // 3
2.1.3 调用对象的原生方法

hasOwnProperty 该方法是查看一个对象是否有某一个属性或者方法
这个属性或者方法必须是自身就有的,而不是继承而来

var obj = {};
obj.hasOwnProperty('toString') // false

// 覆盖掉继承的 hasOwnProperty 方法
obj.hasOwnProperty = function () {
  return true;
};
obj.hasOwnProperty('toString') // true

Object.prototype.hasOwnProperty.call(obj, 'toString') // false

上面代码中 hasOwnPropertyobj 继承来的方法,用来判断对象是否包含自身特点(非继承)属性,但是 hasOwnProperty 并不是保留字,如果被对象覆盖,会造成结果错误。

call 方法可以解决这个问题,它将 hasOwnProperty 方法的原始定义放到 obj 对象上执行,这样无论 obj 上有没有同名方法,都不会影响结果。

2.2 apply - Function.prototype.apply( )

func.apply(thisValue, [arg1, arg2, ...])
2.2.1 apply 与call 的区别

相同点:

  • apply与call的作用类似,也是改变this指向,然后调用函数
  • 第一个参数也是 this 所要指向的那个对象,如果设为 nullundefined,则等同于指定全局对象。

不同点:

  • apply接受数组作为 函数执行时的参数,在 call 方法中必须一个个添加,但是在 apply 方法中,必须以数组形式添加,该数组的所有成员依次作为参数,传入原函数。
function f(x, y){
  console.log(x + y);
}

f.call(null, 1, 1) // 2
f.apply(null, [1, 1]) // 2
2.2.2 利用apply传入数组的特性,实现一些小功能

1. 输出数组的最大值

var a = [24,30,2,33,1]
Math.max.apply(null,a)  //33

2. 将数组的空元素转化成undefined
意义:数组的 forEach 方法会跳过空元素,但是不会跳过 undefined。undefined可以通过forEach循环出来

var a = ['a', , 'b'];

function print(i) {
  console.log(i);
}

a.forEach(print)
// a
// b

Array.apply(null, a).forEach(print)
// a
// undefined
// b

3. 配合数组的slice方法,实现类数组转化为真正的数组

Array.prototype.slice.apply({0: 1, length: 1}) // [1]
Array.prototype.slice.apply({0: 1}) // []
Array.prototype.slice.apply({0: 1, length: 2}) // [1, undefined]
Array.prototype.slice.apply({length: 1}) // [undefined]

将类似数组的对象转化为数组

2.3 bind - Function.prototype.bind( )

f.bind(obj)

bind用于将函数体内的this绑定到某个对象,然后返回一个新函数:
例:
问题:

var d = new Date();
d.getTime() // 1481869925657

var print = d.getTime;
print() // Uncaught TypeError: this is not a Date object.

执行print时,将getTime赋值给print,相当于全局调用,此时this指向window

使用bind解决:

var print = d.getTime.bind(d);
print() // 1481869925657

通过bind,返回一个新函数,这个新函数this被绑定到了d上

2.3.1 bind传入一个参数时

bind接收的参数就是所要绑定的对象
常规绑定:

var counter = {
  count: 0,
  inc: function () {
    this.count++;
  }
};

var func = counter.inc.bind(counter);
func();
counter.count // 1

bind中传入对象为counter,所以bind前函数执行时this指向counter

绑定到其他对象:

var counter = {
  count: 0,
  inc: function () {
    this.count++;
  }
};

var obj = {
  count: 100
};
var func = counter.inc.bind(obj);
func();
obj.count // 101

传入的对象为obj,所以执行bind前的函数时,函数指向obj

2.3.1 bind传入多个参数时

bind 接受多个参数时,除了第一个参数,其他参数会绑定到原函数的参数

var add = function (x, y) {
  return x * this.m + y * this.n;
}

var obj = {
  m: 2,
  n: 2
};

var newAdd = add.bind(obj, 5);
newAdd(5) // 20

bind的第一个参数为obj,所以将bind前函数的this指向为obj,后面的参数会作为调用add方法时的参数传入

2.3.2 第一个参数为null或undefined时

bind 方法的第一个参数是 nullundefined,等于将 this 绑定到全局对象,函数运行时 this 指向顶层对象(浏览器为 window)。

function add(x, y) {
  return x + y;
}

var plus5 = add.bind(null, 5);
plus5(10) // 15

函数add内没有使用this,bind方法主要目的是绑定x,y参数,每次运行plus5时,只需要传入另一个参数y就行了。

2.3.3 bind使用时的注意点(即:使用bind的几个场景)
2.3.3.1 bind每一次返回一个函数

事件监听时:
由于每次运行时,就会返回一个新函数。所以上面的代码click事件绑定bind方法会生成一个匿名函数。导致无法取消绑定

element.addEventListener('click', o.m.bind(o));

//取消绑定时
element.removeEventListener('click', o.m.bind(o));

解决:

var listener = o.m.bind(o);
element.addEventListener('click', listener);
//  ...
element.removeEventListener('click', listener);
2.3.3.2 将包含 this 的方法直接当作回调函数
var counter = {
  count: 0,
  inc: function () {
    'use strict';
    this.count++;
  }
};

function callIt(callback) {
  callback();
}
// 写法1: callIt(counter.inc())
callIt(counter.inc.bind(counter));
counter.count // 1

使用如上写法1 的方式传入函数,调用时,this会指向window,相当于全局调用。解决方式就是通过bind绑定this

追问:某些数组方法接收的函数中的this指向

var obj = {
  name: '张三',
  times: [1, 2, 3],
  print: function () {
    this.times.forEach(function (n) {
      console.log(this.name);
    });
  }
};

obj.print()

如上代码没有任何输出,因为this指向为window

解决:

obj.print = function () {
  this.times.forEach(function (n) {
    console.log(this.name);
  }.bind(this));
};

obj.print()
// 张三
// 张三
// 张三
*2.3.3.3 结合call的使用

利用 bind 方法,可以改写一些 JavaScript 原生方法的使用形式,以数组的 slice 方法为例。

[1, 2, 3].slice(0, 1) // [1]
// 等同于
Array.prototype.slice.call([1, 2, 3], 0, 1) // [1]

这样做的本质是在 [1, 2, 3] 上面调用 Array.prototype.slice 方法,因此可以用 call 方法表达这个过程,得到同样的结果。
call 方法实质上是调用 Function.prototype.call 方法,因此上面的表达式可以用 bind 方法改写。

var slice = Function.prototype.call.bind(Array.prototype.slice);
slice([1, 2, 3], 0, 1) // [1]

上面代码的含义就是,将 Array.prototype.slice 变成 Function.prototype.call 方法所在的对象,调用时就变成了 Array.prototype.slice.call。类似的写法还可以用于其他数组方法。

var push = Function.prototype.call.bind(Array.prototype.push);
var pop = Function.prototype.call.bind(Array.prototype.pop);

var a = [1 ,2 ,3];
push(a, 4)
a // [1, 2, 3, 4]

pop(a)
a // [1, 2, 3]

如果再进一步,将 Function.prototype.call 方法绑定到 Function.prototype.bind 对象,就意味着 bind 的调用形式也可以被改写。

function f() {
  console.log(this.v);
}

var o = { v: 123 };
var bind = Function.prototype.call.bind(Function.prototype.bind);
bind(f, o)() // 123

上面代码的含义就是,将 Function.prototype.bind 方法绑定在 Function.prototype.call 上面,所以 bind 方法就可以直接使用,不需要在函数实例上使用。

2.4 手写call、bind、apply

  • 原理或者手写类题目,结题思路
    1. 说明原理,写下注释
    1. 根据注释,补齐代码

手写bind

// 1. 需求:手写bind => bind位置(挂在那里) => Function.prototype
    Function.prototype.newBind = function() {
        // 2. bind是什么? 
        const _this = this;
        const args = Array.prototype.slice.call(arguments);
        // args特点,第一项是新的this,第二项~最后一项函数传参
        const newThis = args.shift();

        // a. 返回一个函数
        return function() {
            // b. 返回原函数执行结果 c. 传参不变
            return _this.apply(newThis, args);
        }
    }

手写apply

 Function.prototype.newApply = function(context) {
        // 边缘检测
        // 函数检测
        if (typeof this !== 'function') {
            throw new TypeError('Error');
        }
        // 参数检测
        context = context || window;

        // 挂载执行函数
        context.fn = this;

        // 执行执行函数
        let result = arguments[1]
            ? context.fn(...arguments[1])
            : context.fn();

        // 销毁临时挂载
        delete context.fn;
        return result;
    }

3.总结

this 的指向哪几种 ?
总结起来,this 的指向规律有如下几条:

  • 在函数体中,非显式或隐式地简单调用函数时,在严格模式下,函数内的 this 会被绑定到 undefined 上,在非严格模式下则会被绑定到全局对象 window/global 上。
  • 一般使用 new 方法调用构造函数时,构造函数内的 this 会被绑定到新创建的对象上。
  • 一般通过 call/apply/bind 方法显式调用函数时,函数体内的 this 会被绑定到指定参数的对象上。
  • 一般通过上下文对象调用函数时,函数体内的 this 会被绑定到该对象上。
  • 在箭头函数中,this 的指向是由外层(函数或全局)作用域来决定的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LFMCW雷达测速基础- 多普勒频移和2DFFT

LFMCW雷达测速基础1 基本测速原理——多普勒频移1.0 写在前面1.1 多普勒效应1.2 多普勒频移疑问2 LFMCW雷达测速原理2.1 Doppler Shift 到底是调频还是调相2.2 为什么是二维FFT1 基本测速原理——多普勒频移 1.0 写在前面 振动/波在空间中传播有三个关键变量&#xff0c;分别…

iNFTnews|Web3正在重新定义粉丝的意义

数字身份正在发展&#xff0c;粉丝圈本身也在发展。Web3技术使粉丝们能够以一种更加人际化的方式与同好、媒体、内容创作者甚至他们崇拜的名人进行互动&#xff0c;粉丝和创作者都可以获得更人性化的体验。另外&#xff0c;一些激励措施还有望从根本上改变我们对名人概念本身的…

Java#14(StringJoiner)

目录 一.StringJoiner的构造方法和成员方法 StringJoiner是jdk8才出现的 作用:可以高效和方便的拼接字符串 1.StringJoiner的构造方法 2.StringJoiner的成员方法 一.StringJoiner的构造方法和成员方法 StringJoiner是jdk8才出现的 作用:可以高效和方便的拼接字符串 1.Stri…

一篇文章入门单链表+刷题实践【java实现+详细注释】

文章目录节点定义链表类获取链表长度清空链表添加节点到链表尾部根据id来删除节点根据id来查询节点修改相同id的节点信息打印链表逆序打印反转链表测试代码打印信息习题反转链表删除链表的节点删除链表的倒数第k个节点节点定义 关于节点里面所存储的信息&#xff0c;需要什么就…

洛谷 P1064 - 金明的预算方案(分组背包)

题目描述 金明今天很开心&#xff0c;家里购置的新房就要领钥匙了&#xff0c;新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是&#xff0c;妈妈昨天对他说&#xff1a;“你的房间需要购买哪些物品&#xff0c;怎么布置&#xff0c;你说了算&#xff0c;只要不超过 n…

HTML学生个人网站作业设计:(宠物官网8页)——bootstarp响应式含有轮播图,响应式页面

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 CSS&#…

H7-TOOL发布V2.19,脱机烧录新增中微半导体、广芯微电子、中移芯昇以及极海和灵动新系列,增加PWM发生器等功能(2022-11-17)

H7-TOOL详细介绍&#xff1a;H7-TOOL开发工具&#xff0c;1拖4/16脱机烧录&#xff0c;高速DAPLINK&#xff0c;RTOS Trace&#xff0c;CAN/串口助手, 示波器, RTT等&#xff0c;支持WiFi&#xff0c;以太网&#xff0c;高速USB和手持 - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Po…

JavaScript对象与内置对象

JavaScript对象与内置对象 文章目录JavaScript对象与内置对象1.JavaScript的基本对象1.1 创建对象1.2 对象的调用1.3 构造函数和对象1.4 变量对象属性2.JavaScript的内置对象2.1 内置对象概念3.JavaScript的Math对象3.1 Math对象概念3.2 Math绝对值和三个取整方法3.3 随机数方法…

AndroidStudio 导入项目模块失败

平台 Ubuntu 20.04AndroidStudio Android Studio Dolphin | 2021.3.1 Patch 1 Build #AI-213.7172.25.2113.9123335, built on September 30, 2022 Runtime version: 11.0.130-b1751.21-8125866 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Linux 5.15.0-53-gen…

Structure-Aware Transformer for Graph Representation Learning

Structure-Aware Transformer for Graph Representation Learning 在图表示学习中&#xff0c;Transformer结构通过位置编码对图形结构进行编码&#xff0c;克服了GNN的几个局限性&#xff0c;但其使用位置编码生成的节点表示不一定能捕获他们之间的结构相似性&#xff0c;所以…

「Redis数据结构」哈希表(Dict)

「Redis数据结构」哈希表&#xff08;Dict&#xff09; 文章目录「Redis数据结构」哈希表&#xff08;Dict&#xff09;[toc]一、概述二、结构三、哈希冲突四、链式哈希五、rehash六、 渐进式 rehash七、总结参考我们知道Redis是一个键值型&#xff08;Key-Value Pair&#xff…

Python自制图片拼图小游戏

前言 唉&#xff0c;怎么说&#xff0c;感觉只有上班的时候摸鱼玩游戏才是最爽的 等于带薪摸鱼&#xff0c;现在不是有点流行说什么 带薪…带薪** 干嘛的 今天也是有点无聊&#xff0c;就想起之前搞了个拼图的小游戏&#xff0c;可以自己更改照片的 嘿嘿 这不刚玩了一局&am…

【Python】Pyside6简易版教程

文章目录一、安装及常见指令1.1 安装1.2 转换指令二、设计UI2.1 类别2.1.1 Spacer2.1.2 Buttons2.1.3 Input Widgets2.1.4 Display Widgets2.1.5 注意事项2.2 对象和属性2.2.1 对象2.2.2 属性2.2.2.1 属性的层级结构2.2.2.2 重要的属性2.2.2.3 插入图片三、回到Python3.1 给现有…

公众号配置调试“errMsg“:“config:fail,invalid signature

一:登陆“微信公众平台”,查看“ip白名单是否设置” ,之前是个可选项,现在是必须设置 二: 1:获取access_token微信公众平台接口调试工具https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E8%8E%B…

JUC03-volatile、CAS及并发原子类

一、 Volatile Volatile可以用来修饰成员变量和静态成员变量&#xff0c;保证可见性、有序性 可见性&#xff1a;保证volatile修饰的变量每次读取都会从主从中进行读取而不是cpu缓存 有序性&#xff1a;对Volatile修饰变量进行写操作时&#xff0c;会在该操作后加上写屏障&…

【附源码】计算机毕业设计JAVA校园教育服务平台

【附源码】计算机毕业设计JAVA校园教育服务平台 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…

【FLASH存储器系列十】Nand Flash芯片使用指导之一

目录 1.1 芯片简介 1.2 功能框图 1.3 存储结构 1.4 信号定义 1.5 双平面&#xff08;plane&#xff09;操作 1.6 Die间交错操作 1.7 错误管理 今天以MT29F8G08AJADAWP芯片为例&#xff0c;说明nand flash的操作方法。 1.1 芯片简介 这是一款镁光的容量8Gb&#xff0c;总…

功能上新 | Magic Data Annotator智能出行舱内舱外全场景标注

随着人工智能、互联网、大数据、5G等新技术应用和汽车产业变革的蓬勃兴起&#xff0c;智能汽车已成为汽车产业发展的重要战略方向。目前&#xff0c;智能驾驶已经成为目前车企营销的核心竞争力。在人车协作过程中&#xff0c;智能汽车最重要的功能就是车舱内外视觉功能&#xf…

Redis入门

目录 NoSQL概述 什么是NoSQL&#xff1f; 为什么要用NoSQL&#xff1f; NoSQL 的特点 NoSQL的四大分类 Redis入门 概述 基础知识 五大数据类型 Redis——Key String(字符串) List(列表) Set(集合) Hash(哈希) Zset(有序集合) 三种特殊数据类型 Geospatial 地理…

冯诺依曼体系结构、操作系统的认识

目录前言1️⃣ 冯诺依曼体系结构1.1 基本概念1.2 存储器的作用1.3 CPU的指令集1.4 实例2️⃣ 操作系统2.1 概念2.2 如何理解“管理”2.2.1 管理的本质2.2.2 管理的方法2.3 系统调用总结前言 &#x1f4ad;本文是对计算机底层学习的初步认识的知识铺垫&#xff0c;初步了解冯诺依…