函数中 this -->普通函数中this 不是看它定义时候所处的对象 谁调用它this就是谁

  1. 普通函数中 this 是什么?

    • 任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window
    • 所有函数内部都有一个变量this
    • 它的值是调用函数的当前对象
  2. 如何确定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
  • 函数体不用大括号: 默认返回结果
  • 函数体如果有多个语句, 需要用{}包围,若有需要返回的内容,需要手动返回
  • 使用场景: 多用来定义回调函数

JuliusDeng
12 声望2 粉丝