你知道js有多少函数吗?

工作太久很基础的东西是最容易忘掉,从这刻开始坚持每日打开从后往前回归,扎根基础,不断进步,才不至于不 KO,瑞思拜~

函数

第一种,普通函数:用function关键字定义的函数

示例:

function foot(){
    let a = '1'
    console.log(a)
}

第二种,箭头函数:用=>运算符定义的函数

示例:

cost foot = () =>{
    let a = 1
    console.log(a)
}

第三种,方法:在class中定义函数

示例:

class b {
    foot(){
        let a = 1
        console.log(a)
    }
}

第四种,生成函数:用function * 定义函数

示例:

function foo*(){
    let a = 1
    console.log(a)
}

第五种,类:用class定义的类,实际上也是函数

示例:

class Foot{
    constructor(){

    }
}

最后一种总结,异步函数:普通函数,箭头函数和生成函数加上async关键字

示例:

async function foot(){
    console.log(0)
}
 const foot = async () =>{
     console.log(0)
}
async function foo*(){
     console.log(0)
}

this关键字的行为

this是javasrcipt中的一个关键字,他的使用方法类似于一个变量,但是它跟变量的子能够为有很多的不同。

this是执行上下文很重要的一部分,同一个函数的调用的方式不同,得到的this值也有所不同

function showThis(){
    console.log(this);
}
var o = {
    showThis : showThis
}

showThis()//gobal
o.showThis(); // o

我们获取函数的表达式,它实际上返回的并非函数本身,而是一个Reference类型

Reference类型由两部分组成:一个对象和一个属性值。不难理解o.showThis产生的Reference类型,即由对象o和属性“showThis”构成。

对于this的解释:调用函数时使用的引用,决定了函数执行时刻的this值。

从运行上来说,this跟面向对象毫无关联,它是与函数调用时使用的表达式相关

换成箭头函数结果就不一样了,改成箭头函数后,不论怎么引用,都不会影响他的this的值。

不难得出结果:

生成器函数、异步生成器函数和异步普通函数跟普通函数行为是一致的,异步箭头函数与箭头函数行为是一致的。

this关键字的机制

函数能引用定义时的变量,如上下文分析,函数也能记住定义时的this,因此,函数内部必定有一个机制来保存这些信息。

在javascript标准中,为函数规定了用来保存定义时上下文的私有属性【【Environment】】

当一个函数执行时,会创建一条新的执行环境记录,记录的外层词法环境会被设置成函数的【【Environment】】

var a = 1;
foo();
在别处定义了
var b = 2;
function foo(){
   console.log(b);
    //
    2
    console.log(a);
    //
    error
}

这里的foo能够访问b(定义时词法环境),却不能访问a(执行时的词法环境),这就是执行上下文的切换机制了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值