美文网首页
函数执行——执行上下文(this)

函数执行——执行上下文(this)

作者: 莎氏笔丫 | 来源:发表于2020-06-16 17:28 被阅读0次
  1. 找到真正调用的函数
  2. 真正函数调用时候,看()左边的东西,找到左边东西所在的对象,这个时候所在的对象就是this。
var num = 10
function fn(){
    console.log(this.num);
}
let obj={
    num:5,
    method:function(fn){
        fn();
        arguments[0]();
    }
}
obj.method(fn,1)//10 undefined

在调用obj.method的时候,其实真正调用的是fn(),左边的部分为fn,fn的Reference为
{
base:window,
name:'fn',
strict:false
},
所以this的值就是GetBase(ref)->base value->window,所以输出num
调用arguments0,看arguments[0],arguments[0]的Reference
{
base:arguments,
name:'arguments[0]',
strict:false
}
所以this的值就是GetBase(ref)->base value->arguments,arguments中不存在num,所以为undefined
如果修改成为arguments.num = 1再执行 arguments0则输出1

关键在于判断 MemberExpression是否为Reference类型

  1. ref = MemberExpression【()左边的部分就是 MemberExpression】
  2. 判断ref是不是一个Reference类型
  • 如果 ref 是 Reference,并且 IsPropertyReference(ref) 是 true【如果base value的值为对象就为true】, 那么 this 的值为 GetBase(ref)【GetBase返回Reference的base value】
    base value的值为对象,那么this的值就是base value->也就是属性所在的对象

  • 如果 ref 是 Reference,并且 base value 值是 Environment Record, 那么this的值为 ImplicitThisValue(ref)【该函数始终返回undefined】

  • 如果 ref 不是 Reference,那么 this 的值为 undefined

Reference的构成

  1. base value,就是属性所在的对象 || EnvironmentRecord,值只可能是 undefined, an Object, a Boolean, a String, a Number, or an environment record中的一种
  2. referenced name,属性的名称
  3. strict reference,是否在严格模式下

相关文章

  • 对js执行上下文的理解

    执行上下文 执行上下文有三种: 全局执行上下文在执行全局代码的时候会创建全局上下文 函数执行上下文在执行函数代码的...

  • js 代码的执行

    执行上下文 EC(Execution Context):代码自己执行所在的环境 全局执行上下文 函数执行上下文 ...

  • 再学 this

    执行上下文主要分为三种:全局执行上下文、函数执行上下文、eval执行上下文。而this和执行上下文是相互绑定的,所...

  • JS 执行上下文

    理解执行上下文 执行上下文(Execution Context): 函数执行前进行的准备工作(也称执行上下文环境)...

  • JavaScript执行上下文、作用域、this难点总结

    一、执行上下文 当函数执行(调用)时,会创建一个称为执行上下文的内部对象。一个执行上下文定义了一个函数执行时的环境...

  • 浏览器工作原理和实践-javascript执行机制

    执行上下文 javascript会创建一个全局的执行上下文,每次执行一个函数又会创建一个执行上下文,确定该函数在执...

  • 作用域链

    运行期上下文:当函数执行时,会创建一个称为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境,函数...

  • 2019-01-07变量和函数预解析,数组,定时器弹框,当天作业

    变量和函数预解析处理执行上下文代码分为两个阶段:进入执行上下文执行代码进入执行上下文:进入执行上下文,方法的变量对...

  • 执行上下文

    什么是执行上下文 执行上下文(Execution contexts)是指 函数调用 在执行栈中产生的变量对象 执行...

  • 块级私有上下文

    之前已经总结过: 全局执行上下文:全局对象GO-->变量提升-->代码执行 函数的执行会形成函数私有上下文:-->...

网友评论

      本文标题:函数执行——执行上下文(this)

      本文链接:https://www.haomeiwen.com/subject/neylxktx.html