前端琐事

复习一下,相关的知识点。在js的编写过程中,函数的地位是不言而喻的。今天分享一道题目:
var name = 'jay';
var person ={
    name:'kang',
    pro:{
    name:'Michael',
    getName:function(){
        return this.name;
      },
    },
};
console.log( person.pro.getName() );
var people = person.pro.getName;
console.log( people() );

这种问题主要是考验开发者对于this的理解。说实话,之前我对this的理解还是比较简陋的。这个问题我是从另一位朋友那里看到的。

在代码执行阶段,js会创建执行上下文:

前端琐事_第1张图片
执行上下文.png

大家可以看到,this在执行上下文的时候确定的也就是在�代码执行的时候确定。

console.log( person.pro.getName() );
这句在执行者是person.pro。所以在执行上下文中this指向了person.pro。
var people = person.pro.getName;
console.log( people() );
这部分的执行者其实没有的,虽然默认people是window的一个属性但是没有显示的调用的话,执行对像就是空的。但是在非严格状态下undefined会被默认指向window。所以结果就出现'jay'。在严格模式下就不会有这个问题了。有兴趣的同学可以试试。
var name = 'jay';
var person ={
    name:'kang',
    pro:{
    name:'Michael',
    getName:function(){
        'use strict'
        return this.name;
      },
    },
};
console.log( person.pro.getName() );
var people = person.pro.getName;
console.log( people() );

本文主要借鉴波同学 这篇文章

你可能感兴趣的:(前端琐事)