this练习题

文章详细探讨了JavaScript中函数作用域在定义时的确定性,以及this关键字在不同调用场景下(如普通函数调用、对象方法调用)的指向问题。通过多个代码示例展示了this如何根据上下文绑定到不同的对象,同时也涉及到了闭包和作用域链的概念。
摘要由CSDN通过智能技术生成
       // 函数的作用域在定义的时候就已经确定了
        // var name = "你好";
        // function fn() {
        //     console.log('name' + name);
        // }
        // var obj1 = {
        //     name: '张三',
        //     age: 1.10,
        //     fn: fn
        // };
        // var obj2 = {
        //     name: '李四',
        //     age: 1.10,
        //     fn: fn
        // };
        // fn(); //name 你好
        // obj1.fn();//name 你好
        // obj2.fn();//name 你好
        //

        // //---------------------------
        // var name = "你好"; //window.name
        // function fn() {
        //     console.log('name' + this.name);
        // }
        // var obj1 = {
        //     name: '张三',
        //     age: 1.10,
        //     fn: fn
        // };
        // var obj2 = {
        //     name: '李四',
        //     age: 1.10,
        //     fn: fn
        // };
        // //以普通函数的形式调用,this指向window
        // fn(); //name 你好
        // // 以对象的方法的形式调用,this指向前面调用他的对象
        // obj1.fn();//name 张三

        // // 以对象的方法的形式调用,this指向前面调用他的对象
        // obj2.fn();//name 李四
        // console.log('外面的', name);
        // //-------------------

        // var A = {
        //     name: '张三',
        //     describe: function () {
        //         return '姓名:' + this.name;
        //     }
        // };

        // var B = {
        //     name: '李四'
        // };
        // B.y = A.describe;
        // console.log(B)

        // console.log(B.y())


        // //-----------------------
        // var A = {
        //     name: '张三',
        //     describe: function () {
        //         return '姓名:' + this.name;
        //     }
        // };

        // var name = '李四';
        // var f = A.describe;
        // // 以普通函数的形式调用 this指向window
        // console.log(f())


        // //------------------------
        // var a = {
        //     p: "hello",
        //     b: {
        //         m: function () {
        //             console.log(this.p)
        //         }
        //     }
        // };
        // a.b.m()

        // //------------------------
        // var b = {
        //     a: 23,
        //     c: 3,
        //     d: {
        //         a: 78,
        //         e: {
        //             a: 100,
        //             f: function () {
        //                 console.log(this.a);
        //             }
        //         }
        //     }
        // }
        // var fn = b.d.e.f;
        // fn();  //undefined
        // b.d.e.f(); //100


        // //---------------------
        // var myObject = {
        //     foo: "bar",
        //     func: function () {
        //         var self = this;
        //         console.log(this.foo);
        //         console.log(self.foo);
        //     }
        // };
        // myObject.func();
        //bar bar

        // //------------------------
        // var x = 3;
        // var y = 4;
        // var obj = {
        //     x: 1,
        //     y: 6,
        //     getY: function () {
        //         var y = 7;
        //         return y, this.y;
        //     }
        // }
        // console.log(obj.getY());


        // //--------------
        // function a(xx) {
        //     this.x = xx;
        //     return this;
        // }
        // var x = a(5);
        // var y = a(6);
        // console.log(x.x);    //unde
        // console.log(y.x);   //6
        // // window.x = 5;
        // // window.x = window
        // // window.x = 6
        // // window.y = window


        // //------------------------
        // var $ = {
        //     name: 'haha',
        //     fn: function () {
        //         console.log(1);
        //         return this;
        //     },
        //     fn2: function () {
        //         console.log(2);
        //         console.log(this.name)

        //     }
        // }

        // console.log($.fn().fn2())





        // //--------------------
        // var obj = {
        //     foo: function () {
        //         console.log(this)
        //     }
        // }
        // obj.foo();
        // (false || obj.foo)();

        // //----------------
        // var obj = {
        //     f1: function () {
        //         console.log(this)
        //         var f2 = function () {
        //             console.log(this)
        //         }();
        //     }
        // }
        // obj.f1();


        // //-------------------
        // var name = '1234'
        // function fn() {
        //     var name = '5678'
        //     console.log('111', this.name, name);
        //     function fun() {
        //         console.log('22222', this.name, name);
        //     }
        //     fun()
        // }
        // fn()




        // //-----------------------
        var point = {
            x: 0,
            y: 0,
            moveTo: function (x, y) {
                //point的x属性赋值为1
                this.x = x;

                console.log(this.x);//1
                console.log(this);//point对象

                var moveX = function (x) {
                    this.x = x;//window.x=1
                };
                var moveY = function (y) {
                    this.y = y;//window.y=1
                }
                moveX(x);//moveX(1)
                moveY(y);//moveY(1)
            }
        };
        point.moveTo(1, 1);
        console.log(point.x);//1
        console.log(point.y);//0
        console.log(x);
        console.log(y);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值