js函数三种角色,函数存储与执行的过程

  • 函数的三种角色

1)普通函数:它本身就是一个普通函数,执行的时候形成私有作用域,都要经历形参赋值,预解释,代码从上到下执行

2)类:它有自己的实例,也有一个prototype的属性作为自己的原型,它的实例都可以指向自己的原型

3)普通对象:和var obj = {}一样,就是一个普通对象,可以设置自己的私有属性,可以通过__proto__找到Function.prototype

函数的三种角色互不影响,我们看下面这个例子

function Fn(){
    var num = 100;
    this.x = 120;
}
Fn.prototype.getX = function(){
    console.log(this.x)
}
Fn.aaa = 1000;
var f = new Fn; //Fn作为类
f.num // undefined
f.aaa // undefined
var res = Fn(); //Fn作为普通函数
res // undefined
Fn.aaa // 1000 //Fn作为一个普通对象
  • 函数的预解释
function f(a,b){
    var total = a+b;
    console.log(total)
}

 上面这个函数,首先会进行预解释,函数的预解释是声明+定义的;

  • 函数的执行

当函数执行时首先会形成一个私有作用域,这个作用域是栈内存,然后按以下步骤执行:

1)有形参则给形参赋值

2)私有作用域预解释

3)在私有作用域中将函数代码从上到下执行

函数执行时形成了一个私有作用域保护了作用域内的变量不受外界的干扰,这样的机制就是闭包

画图来表示上述过程:

  • 如何区分全局变量和私有变量

1)在全局作用域下声明(预解释)的变量是全局变量,在私有作用域声明的变量是私有变量

2)函数的形参是私有变量

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值