函数中 this -->普通函数中this 不是看它定义时候所处的对象 谁调用它this就是谁
-
普通函数中 this 是什么?
- 任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window
- 所有函数内部都有一个变量this
- 它的值是调用函数的当前对象
-
如何确定this的值?
- test(): window
- p.test(): p
- new test(): 新创建的对象(准确说不是p 但p最后是指向这个对象的) var p = new test()
- p.call(obj): obj
//
情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window,但是我们这里不探讨严格版的问题,你想了解可以自行上网查找。
情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。
情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象
var o = {
a:10,b:{ // a:12, fn:function(){ console.log(this.a); //undefined }}
}
o.b.fn();尽管对象b中没有属性a,这个this指向的也是对象b,因为this只会指向它的上一级对象,不管这个对象中有没有this要的东西。//
var o = {a:10,b:{ a:12, fn:function(){ console.log(this.a); //undefined console.log(this); //window }}
}
var j = o.b.fn;j();**this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的,例子中虽然函数fn是被对象b所引用,
但是在将fn赋值给变量j的时候并没有执行所以最终指向的是window**箭头函数的特点:
1、简洁2、箭头函数没有自己的this,箭头函数的this不是调用的时候决定的,而是在定义的时候处在的对象就是它的this
3、扩展理解: 箭头函数的this看外层的是否有函数,
如果有,外层函数的this就是内部箭头函数的this,( 如果它的外层也是箭头函数,则继续向外找) 如果没有,则this是window。
- 作用: 定义匿名函数
- 基本语法:
- 没有参数: () => console.log('xxxx')
- 一个参数: i => i+2
- 大于一个参数: (i,j) => i+j
- 函数体不用大括号: 默认返回结果
- 函数体如果有多个语句, 需要用{}包围,若有需要返回的内容,需要手动返回
- 使用场景: 多用来定义回调函数