前天面试面试官问了this相关的问题,这里想整理一下,首先看下面这个函数,输出值都是liujie,因为第一个函数调用时在全局作用域下,因此输出全局变量var name = “liujie”,第二个函数调用是,明明是obj对象调用了为神马也输出liujie呢,这里就说起this了
<script>
var name = "liujie"
function getName() {
console.log(name);
}
var obj = {
name: '你好',
fun: getName
}
getName()//liujie
obj.fun()//liujie
</script>
如果仅在函数getName中加入this,答案又是什么呢?
<script>
var name = "liujie"
function getName() {
console.log(this.name);
}
var obj = {
name: '你好',
fun: getName
}
getName() //liujie
obj.fun() //你好
</script>
这种差异的原因,就在于函数体内部使用了this关键字。this指的是函数运行时所在的环境。 对obj.fun()来说,函数的调用者是obj,因此this指向obj,而fun(),其运行环境是window全局,这造成了this的指向。