js中的this理解

本篇参考多篇网文, 记录自己对这个问题的理解。

  1. 为什么要这么设计?

由于函数可以在不同的运行环境执行,所以需要有一种机制,能够在函数体内部获得当前的运行环境(context)。所以,this就出现了,它的设计目的就是在函数体内部,指代函数当前的运行环境。(不是函数定义时的环境)。

  1. 为什么函数可以在不同的运行环境执行?

这个跟js是动态语言有关系。
静态编译的语言,会用固定地址替代函数名。程序运行的时候,函数名是不会参与执行的。而在js这种解释型语言中,变量(指向函数的变量)和函数实现完全可以是两个不同的运行实体。

变量(指向函数的变量)拥有自己的类型,还需要分配内存,变量(指向函数的变量)可以参与程序执行。

函数在其中只是一个单独的值,它可以在不同的环境(上下文)执行。
意思就是说函数可以作为地址,可以由不同的变量名指向。
真正的上下文由当前指向函数的变量(的上下文)决定。

var f = function () {};
var obj = { f: f };

// 全局环境执行
f()

// obj 环境执行
obj.f()

var fn = obj.f
// 全局环境执行
fn()
  1. this的搜索范围与普通变量有什么不同?

函数在被调用时,自动取得两个特殊变量this和arguments。
函数体内在搜索这两个变量时只会搜索自己当前的上下文环境,而不是像其它普通变量一样通过作用域向上搜索。

  1. 匿名函数和自执行函数的this又是怎么判断的?

匿名函数的运行上下文是全局环境,
自执行函数的运行上下文也是全局环境。
我的理解是,这些函数的执行,都是解释器自动为他们分配了指向的函数名,而这个函数名是全局的。

参考:
http://www.ruanyifeng.com/blog/2018/06/javascript-this.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值