var a=11
function test1(){
this.a=22;
let b=function(){
console.log(this.a);
};
b();
}
var x=new test1();
返回11 这个this为什么指向window?
除了箭头函数()=>{}外,每一个用function声明的函数在调用时都会在函数内创建自己的this。
也就是说,function声明的函数总是有自己的this。从而遮盖外层作用域中的this。
this一般是函数所操作的对象。
如果函数是直接调用,如你的代码 b();就没有指定操作的对象。这样,this在"use strict";严格模式下是 undefined,非严格模式下是 window。
你这个没有在任何类型或者闭包类型里,所以是全局的,全局作用域或者普通函数中this指向全局对象window
这段代码需要理解 new都做了什么,参考 https://www.cnblogs.com/AaronNotes/p/6529492.html
this是指当前对象自己。
因为你的函数没有传入THIS对象,所以THIS取更上一级。
this一般是函数所操作的对象。
因为new创建的新构造函数中,内部的函数实现了栈内存复制给了x,所以在非严格模式下,this默认指向全局作用域。
指当前所在作用域的成员变量,如果当前作用域没有该标识符,则代表上一级作用域的成员变量
这个this指的是调用该方法的具体对象
这个牵扯到闭包的问题 ,去看看JS的闭包把
看用在什么地方,如果是 调用方法中例如 fangfaming(this) 指当前对象,如果 在 function{
this.
} 则表示全局对象。
分给我 函数 function 是 类 class 的子集 ,在子集中引用类中的对象,因为是外部的,所以前面要标注this,当前类的意思
this一般是函数所操作的对象。this一般是函数所操作的对象。
this.a=22; 作用域只在test1()方法中。而打印的是在b这个方法中 在b中打印this 都是取得全局变量 并不是局部变量。所以输出的是11
除了箭头函数()=>{}外,每一个用function声明的函数在调用时都会在函数内创建自己的this。
也就是说,function声明的函数总是有自己的this。从而遮盖外层作用域中的this。
this一般是函数所操作的对象。
如果函数是直接调用,如你的代码 b();就没有指定操作的对象。这样,this在"use strict";严格模式下是 undefined,非严格模式下是 window。
函数里面的this指向的是函数所在的作用域,你这个函数是全局的,所以this指的就是window