美文网首页
【转】JS函数不同执行环境下的this指向

【转】JS函数不同执行环境下的this指向

作者: bigggge | 来源:发表于2017-06-27 09:35 被阅读13次

https://www.ddhigh.com/javascript/2015/08/20/js-function-this-scope.html

先来看一段代码

var length = 10;
function fn() {
  console.log(this.length);
}

var obj = {
  length: 5,
  method: function(fn) {
    fn();
    arguments[0]();
  }
};

obj.method(fn,1);

猜猜输出结果?

浏览器环境

10
2

为什么输出10?

执行过程大致如下:

obj.method这是个obj对象的方法,而传入的fn是个函数,fn()属于调用模式的”函数调用”,非严格模式下,this为global对象(浏览器中就是window)。
而在这段代码的最上方使用var定义了length,由于var是直接写在global作用域中的,所以此处的 var length 与 window.length是同一个东西。输出10也就不奇怪了。

为什么输出2?

arguments这个是在函数内部才有的参数,很像array,而且typeof得到的也是object值,我们知道,js访问对象有 . 操作符 和 中括号操作符,此处使用的是第二种方法获取到obj.method的第一个参数,也就是fn.
由于arguments0是输入调用方式中的“方法调用模式”,this指向对象本身,也就是arguments,所以会输出2。

NodeJs环境

undefined
2

为什么输出undefined?

nodejs的global处理机制不同

global贯穿与nodejs整合生命周期,而每个js文件是单独的模块,就算使用var定义在顶层,也只是这个module的全局变量。所以会输出undefined。

为什么输出2?

同浏览器。

相关文章

  • 【转】JS函数不同执行环境下的this指向

    https://www.ddhigh.com/javascript/2015/08/20/js-function-...

  • JS--this指向问题

    JS--this指向问题 1.function中的this在不同环境下的指向 事件调用环境:谁触发的事件,函数里面...

  • 搞清楚 this 的指向问题

    不同环境下 function 的 this 的不同指向 事件调用环境 - 谁触发事件,函数里面的 this 就指向...

  • js中this指向与apply、call、bind

    this this是js函数的内部属性,指向当前执行代码的环境对象 一般函数调用模式 对象方法调用模式 将对象的方...

  • js 中的this

    首先js中函数的this在函数被调用时总是指向一个对象(this对象是在运行时基于函数的执行环境绑定的) 然后 它...

  • js闭包、执行环境、作用域链

    执行环境 执行环境:函数的运行环境 js的全局执行环境:window对象=》活动对象 1、每个函数都有一个执行环境...

  • 如何正确判断this的指向?

    全局环境 无论是否在严格模式下,在全局执行环境中(在任何函数体外部)this 都指向全局对象。 函数(运行内)环境...

  • this、call 和 apply

    Js中的this总是指向一个对象,而具体指向哪一个对象是在运行时基于函数的执行环境动态绑定的,而非函数被声明时的环...

  • js中的this对象

    js中的this总会指向一个对象,具体是哪个对象就由运行时函数的执行环境而决定了。在实际应用中,this的常用指向...

  • 也谈Javascript中的this指向问题

    跟别的语言大相径庭的是:js的this总是指向一个对象,而具体指向哪个对象是在运行时基于函数的执行环境动态绑定的,...

网友评论

      本文标题:【转】JS函数不同执行环境下的this指向

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