JavaScript中this的指向问题

全局环境中的this指向

无论是否在严格模式下,在全局执行环境中(在任何函数体外部)this 都指代全局对象(不一定是window对象)。

var name = 'Mrs Right'
console.log(this.name) // Mrs Right
console.log(window.name) // Mrs Right

函数作用域

function func () {
	this.name = 'Mrs Right'
	var name2 = 'Mr Zhou'
}
console.log(this.name, name2) // undefined undefined
func()
console.log(this.name, name2) // Mrs Right undefined

从上面的代码来看,func内部的this指向的还是window对象。但如果是在函数内部使用var来申明一个变量 则该变量不会得到提升。上面的代码在nodejs环境执行则会输出两次undefined

var name = 'Mrs Right'
function test () {
  // var self = this
  var name = 'Mr Zhou'
  var test2 = function () {
    console.log(name, this.name) // Mr Zhou undefined
    // console.log(name, this.name) // Mr Zhou MrsRight
  }
  test2()
}

test() 

在函数test2()内部调用不能以this方式调用test()函数外的内容,这时可以使用在test函数定义var self = this的方式来使用test()中的this内容。

var name = 'Mr Zhou'
var obj = {
	name:  'Mrs Right',
	func: function () {
		console.log(this.name)
	}
}

obj.func() // Mrs Right

在一个object内部定义function,在任意处发起调用时,this永远指向这个object

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值