- 函数的三种角色
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)函数的形参是私有变量
版权声明:本文为qq_37200686原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。