美文网首页JS
匿名函数、普通函数、箭头函数的this作用域

匿名函数、普通函数、箭头函数的this作用域

作者: 我没事_就是有点难受 | 来源:发表于2019-11-18 16:29 被阅读0次

匿名函数

// 匿名函数的this指向具有全局性 当this在函数内找不到时,会去全局查找
var name = "张三";
var obj = {
    name: "李四",
    getNameFun: function(){
        return function(){
            return this.name;
        }
    }
};
console.log(obj.getNameFun()()); // 张三

// 换种写法
// 箭头函数的this由定义该箭头函数的作用域的this指向决定,因此下面定义箭头函数的作用域是obj obj的this指向window 所以打印张三
var name = '张三'
var obj = {
    name: "李四",
    getNameFun: () => {
        return this.name;
    }
};
console.log(obj.getNameFun()); // 张三

普通函数

// 普通函数的this指向当前定义的函数内部,但是当函数被其他对象调用时this指向调用者的内部
var val = 1;
var obj = {
    val: 2,
    dbl: function(){
        this.val *= 2;
        val *= 2;
        console.log(`val的值是${val}`); // 2
        console.log(`this.val的值是${this.val}`); // 4
    }
};
obj.dbl(); // dbl函数内的this指向调用者obj本身
var func = obj.dbl;
func(); // dbl函数内的this指向全局变量func调用者本身

function getAge() {
    var y = new Date().getFullYear();
    return y - this.birth;
}
// 换种写法
var xiaoming = {
    name: '小明',
    birth: 1990,
    age: getAge
};

xiaoming.age(); // 25, 正常结果
getAge(); // NaN

如果以对象的方法形式调用,比如xiaoming.age(),该函数的this指向被调用的对象,也就是xiaoming,这是符合我们预期的。
如果单独调用函数,比如getAge(),此时,该函数的this指向全局对象,也就是window。

箭头函数

// 箭头函数的this定义:箭头函数的this是在定义函数时绑定的,不是在执行过程中绑定的。简单的说,函数在定义时,this就继承了定义函数的对象。
var obj = {
    funA: function(){
        console.log(this);
    },
    funB: function(){
        setTimeout(()=>{
          console.log(this);  
        })
    }
};
obj.funA(); // obj
obj.funB(); // obj

相关文章

  • js函数

    定义函数 具名函数 匿名函数 注意fn2()作用域为 = 右侧 箭头函数 在调用箭头函数时里面的this就是外面的...

  • 匿名函数、普通函数、箭头函数的this作用域

    匿名函数 普通函数 箭头函数

  • ES6--箭头函数

    箭头函数 解释 箭头函数就是个简写形式的函数表达式,并且它拥有词法作用域的this值。另箭头函数总是匿名的。 用法...

  • 箭头函数

    箭头函数 特点:1、this指向离自己最近的外层作用域的对象;2、不能当做构造函数使用(箭头函数是匿名函数,没有函...

  • JS箭头函数

    箭头函数的作用域是和定义这个箭头函数的父级上下文绑定在一起的匿名函数的作用域是和定义匿名函数的上下文绑定在一起的 ...

  • 箭头函数

    箭头函数本身没有this, 由箭头函数声明时所处作用域决定。作用域(两个): ① 函数作用域 ② 全局作用域箭头函...

  • JS-函数

    1.定义(1)匿名函数(2)具名函数(3)箭头函数,无this 词法作用域(也叫静态作用域)JS看到上面的代码不是...

  • es6

    箭头函数与普通函数的区别 箭头函数是匿名函数,不能作为构造函数,不能使用new 箭头函数不绑定arguments,...

  • 9、箭头函数和普通函数的区别

    箭头函数: 普通函数: 1、箭头函数是匿名函数,不能作为构造函数,不能使用new原因:箭头函数没有原型对象prot...

  • es6应该搞清楚的问题

    一、箭头函数与普通functon有什么区别?箭头函数可以完全代替普通functon吗? 1.箭头函数是匿名函数,不...

网友评论

    本文标题:匿名函数、普通函数、箭头函数的this作用域

    本文链接:https://www.haomeiwen.com/subject/lglbictx.html