发表于: 2021-07-22 20:31:39

1 1984


今天完成的事情:this 指向及改变this指向方法;const、let与var


明天计划的事情:箭头函数知识点;angular核心思想;;


收获:


    // this 指向
    /**
    * 实例一:
    */
    function b() {
        var user = "天涯";
        console.log(this.user); // undefined
        console.log(this); // Window {window: Window, self: Window, document: document, name: "", location: Location, …}
    }; window.b();

    function c() {
        var user = "loong";
        console.log(this.user); // undefined
        console.log(this); // Window {window: Window, self: Window, document: document, name: "", location: Location, …}
    }; c();


    /**
    * 实例二:
    */
    var a = {
        user: "追梦",
        fnfunction () {
            console.log(this.user); // 追梦
            console.log(this); // {user: "追梦", fn: ƒ}
        }
    }; a.fn();

    /**
    * 实例三:
    */
    var o = {
        a: 10,
        b: {
            a: 12,
            fnfunction () {
                console.log(this.a); // 12
                console.log(this)
            }
        }
    }; o.b.fn();

    // var o = {
    //     user: "辛弃疾",
    //     fn: function () {
    //         console.log(this.user) // 辛弃疾
    //         console.log(this); // {user: "辛弃疾", fn: ƒ}
    //     }
    // }; window.o.fn();

    // 情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window,但是我们这里不探讨严格版的问题,你想了解可以自行上网查找。

    // 情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。

    // 情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象,

    var o = {
        a: 10,
        b: {
            // a:12,
            fnfunction () {
                console.log(this.a); //undefined
            }
        }
    }
    o.b.fn();

    var o = {
        a: 10,
        b: {
            a: 12,
            fnfunction () {
                console.log(this.a); //undefined
                console.log(this); //window
            }
        }
    }
    var j = o.b.fn;
    j();


const、let与var区别:

1、var。var声明的变量没有块级作用域,而且存在变量名提升的情况

2,const(es6中用来定义常量的一个关键字(当然了,其他语言里也存在着const,这里仅指在js中)。常用来声明常量,且常量不可修改,必须初始化,存在着块级作用域。

(1)、不存在名称提升问题

(2)、声明时必须初始化。

(3)、存在着块级作用域。

<script>
    const num = 456
    if (true) {
        const num = 789;
        console.log(num); // 789
    }
    console.log(num// 456
</script>

3、let(es6中用来定义变量的一个关键字)。let定义的变量存在着块级作用域,在函数内定义的变量,对函数外部无影响。

(1)、在函数内部定义的变量,对函数外部无影响,即存在着块级作用域。

(2)、不存在着变量名的提升。



返回列表 返回列表
评论

    分享到