// 函数的作用域在定义的时候就已经确定了
// 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);
this练习题
最新推荐文章于 2024-11-07 22:43:35 发布
文章详细探讨了JavaScript中函数作用域在定义时的确定性,以及this关键字在不同调用场景下(如普通函数调用、对象方法调用)的指向问题。通过多个代码示例展示了this如何根据上下文绑定到不同的对象,同时也涉及到了闭包和作用域链的概念。
摘要由CSDN通过智能技术生成