无法对 null 引用执行运行时绑定_你真的懂this吗?聊聊默认绑定,隐式绑定,显示绑定,new绑定...

https://github.com/YvetteLau/Blog/issues/6

this关键字是JavaScript中最复杂的机制之一,是一个特别的关键字,被自动定义在所有函数的作用域中,但是相信很多JavaScript开发者并不是非常清楚它究竟指向的是什么。

再看一道题,控制台打印出来的值是什么?【浏览器运行环境】

var number = 5;var obj = { number: 3, fn1: (function () { var number; this.number *= 2; number = number * 2; number = 3; return function () { var num = this.number; this.number *= 2; console.log(num); number *= 3; console.log(number); } })()}var fn1 = obj.fn1;fn1.call(null);obj.fn1();console.log(window.number);
a552c08510f08fde9ceb253c4803c1b7.png

为什么要学习this?

首先,我们为什么要学习this?

  1. this使用频率很高,如果我们不懂this,那么在看别人的代码或者是源码的时候,就会很吃力。
  2. 工作中,滥用this,却没明白this指向的是什么,而导致出现问题,但是自己却不知道哪里出问题了。
  3. 合理的使用this,可以让我们写出简洁且复用性高的代码。
  4. 面试的高频问题,回答不好,抱歉,请回去等通知。

this是什么?首先记住this不是指向自身!this 就是一个指针,指向调用函数的对象。这句话我们都知道,但是很多时候,我们未必能够准确判断出this究竟指向的是什么?为了能够一眼看出this指向的是什么,我们首先需要知道this的绑定规则有哪些?

  1. 默认绑定
  2. 隐式绑定
  3. 硬绑定
  4. new绑定

默认绑定

默认绑定,在不能应用其它绑定规则时使用的默认规则,通常是独立函数调用。

function sayHi(){ console.log('Hello,', this.name);}var name = 'YvetteLau';sayHi();
bce4cead5b7d4684a6e631242ce1ed69.png

在调用sayHi()时,应用了默认绑定,this指向全局对象(非严格模式下),严格模式下,this指向undefined,undefined上没有this对象,会抛出错误。

上面的代码,如果在浏览器环境中运行,那么结果就是 Hello,YvetteLau.但是如果在node环境中运行,结果就是 Hello,undefined.这是因为node中name并不是挂在全局对象上的。如不特殊说明,默认为浏览器环境执行结果。

隐式绑定

函数的调用是在某个对象上触发的,即调用位置上存在上下文对象。典型的形式为 XXX.fun().我们来看一段代码:

function sayHi(){ console.log('Hello,', this.name);}var person = { name: 'YvetteLau', sayHi: sayH
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ZigBee是一种无线网络协议,支持多种拓扑结构,包括星型、网状和混合结构等。为了实现设备之间的通信,ZigBee引入了机制,用于将设备之间的逻辑关系建立起来。 ZigBee的机制可以分为两种类型:单向和双向。 1. 单向:单向是指一个设备将自己的某个输出端点(Output Endpoint)到另一个设备的某个输入端点(Input Endpoint),从而实现数据流的传输。例如,一个灯具的Output Endpoint可以到一个遥控器的Input Endpoint上,当遥控器发送控制信号,灯具就可以接收并执行相应的操作。 2. 双向:双向是指两个设备之间建立起双向的逻辑关系,可以实现双向数据流的传输。例如,一个传感器可以将自己的Output Endpoint到一个灯具的Input Endpoint上,同将灯具的Output Endpoint到自己的Input Endpoint上。这样,当传感器检测到某个事件,可以向灯具发送控制信号,同也可以接收灯具的反馈信息。 ZigBee的机制还可以分为和显两种方。 1. 是指设备之间的关系由网络协调器(Coordinator)自动分配和管理,设备无需进行手动操作。这种方适用于网络规模比较小的场景,例如家庭自动化系统。 2. 显:显是指设备之间的关系由用户手动指和管理,需要通过特的API函数来实现。这种方适用于网络规模较大的场景,例如智能城市、工业自动化等。 总之,ZigBee的机制是建立在端点之间的逻辑关系之上,可以实现设备之间的数据传输和控制操作,从而实现智能化的无线网络应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值