-
几种函数
a. 普通函数
function foo(){};b. 箭头函数
const foo = () => {}c. 在class中定义的函数 ( 方法 )
class C {
foo(){}
}d. 生成器函数 ( function* )
function* foo(){}
e. 用class定义的类
class Foo {
constructor(){
// code
}
}f. 异步函数: 普通函数、箭头函数和生成器函数加上async关键字
async function foo(){ // code } const foo = async () => { // code } async function foo*(){ // code }
-
this
a. this值在不同的函数类型中有不同的效果普通函数的 this 值由“调用它所使用的引用”决定 function showThis(){ console.log(this); } var o = { showThis: showThis } showThis(); // global o.showThis(); // o 箭头函数 不论用什么引用来调用它,都不影响它的 this 值。 const showThis = () => { console.log(this); } var o = { showThis: showThis } showThis(); // global o.showThis(); // global 方法函数 class C { showThis() { console.log(this); } } var o = new C(); var showThis = o.showThis; showThis(); // undefined o.showThis(); // o *生成器函数、异步生成器函数和异步普通函数跟普通函数行为是一致的,异步箭头函数与箭头函数行为是一致的
b. Reference类型: 由一个对象和一个属性值组成。
c. this 关键字机制
上下文的私有属性[[Environment]][[thisMode]] 私有属性有三个取值: lexical:表示从上下文中找 this,这对应了箭头函数。 global:表示当 this 为 undefined 时,取全局对象,对应了普通函数。 strict:当严格模式时使用,this 严格按照调用时传入的值,可能为 null 或者 undefined。 var o = {} o.foo = function foo(){ console.log(this); return () => { console.log(this); return () => console.log(this); } } o.foo()()(); // o, o, o
d. new与this
a. new的执行过程
以构造器的 prototype 属性(注意与私有字段[[prototype]]的区分)为原型,创建新对象;
将 this 和调用参数传给构造器,执行;
如果构造器返回的是对象,则返回,否则返回第一步创建的对象。
js执行(3)
最新推荐文章于 2024-05-30 11:27:58 发布