复习一下,相关的知识点。在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会创建执行上下文:
大家可以看到,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() );
本文主要借鉴波同学 这篇文章