原型:函数的组成结构
通过这个图我们需要知道。
假设我们创建了一个Foo函数。
规则:Function.protoType是函数显示原型。__proto__是隐式对象。
Function、Object、Foo函数的__proto__指向了Function.protoType说明。这三个都依托function函数来创建。
然后他们三个会分别在创建一个protoType。他们各自创建了一个空间存放自己的数据。他们的protoType都会指向Object的对象。
判断instandof 只需要看右边的prototype是否在左边的__proto__的路径上即可。
执行上下文:代码执行时
在不管调用函数还是直接执行全文时都会进行预处理。进行函数和变量提升。
执行上下文的个数初始都是1。调用了多少次函数就是执行了多少次上下文。函数内也可以再调用函数(这样有助于我们简化代码,实现复用)。比较常见的就是递归。
作用域:在书写时定义
作用域:一块”地“。表示我们函数书写的区域。我们一个函数内书写的内容在没有意外(bug)的情况下是整个进行执行的。而作用域类似于告诉你哪些代码是我的,那些代码不是我的。是我的。我执行时我就全跑。不是我的。函数调用时我理都不理。
最后就是值查询。函数中没有值的时候他会跳会上一级对象进行查询
闭包
闭包如何定义:是一个包含被引用变量的对象。
这里有两个限制条件:
- 第一这个函数嵌套
- 第二个就是内部函数引用外部函数。比如下例中fn2中没有定义a,ta是在TA的上层fn1中寻找的。
简述闭包形成过程。
我们先书写一个下例。然后我们去跑代码。在23行我们对f进行赋值。f的值九十fn2(没错就是哪个fn2函数。但TA返回的是完整的函数代码。)还保存了fn2调用的a。形成闭包,然后这个函数就fn1就被回收了。
此时,f是一个引用对象,指向了函数f2。
对闭包的理解。我们可以类比java的class对象中的封装知识。我们设置了如上的a属性和访问方法。是不是能类比成。
private a
public static int get(){
}
闭包的常规用途:
其中第二步:是在setTimeOut中书写方法。
如何暴露多个方法:返回对象。
匿名函数书写:
正常写: