js执行上下文
全局执行上下文
函数上下文
eval上下文
先进后出 u型特性
当函数结束时,1.弹出执行栈2.函数返回值返回调用上下文3.这个本地函数执行上下文被销毁
如何查找变量,沿着作用域查找,不是严格按照上下文查找
闭包:
let a = 7
function creatadder(){
function addnumber(a,b){
let ret = a + b
return ret
}
return addnumber
}
let adder= creatadder()
let sum = adder(val,8)
console.log(‘example of function returning a function:’,sum)
真正的闭包
function createCounter() {
let counter = 0
const myFunction = function() {
counter = counter + 1
return counter
}
return myFunction
}
const increment = createCounter()
const c1 = increment();const c2 = increment();const c3 = increment();
console.log(‘result’, c1, c2, c3)
闭包不会销毁,会继承.
当函数返回函数时,闭包的概念就变得更加重要了,返回的函数可以访问不属于全局作用域的变量,蛋它们仅存在于闭包中.
当一个函数,被创建并传递或从另一个函数返回时,会携带一个背包,背包中是函数声明时作用域内的所有变量.
闭包不可以理解为在函数里返回函数的函数,这是引发闭包问题的原因,而不是,闭包概念的本身.
原型链
函数的二义性,可调用,可构造函数
构造函数约定首字母大写,函数对象约定首字母小写
构造函数调用的时候需要在前面加一个new,函数对象不需要.
不是所有的内置函数都是构造函数.
也不是所有的自定义函数都是构造函数.
构造函数和普通函数
built in ,绝大多数原型中的可枚举方法都是普通函数
for(i in window){if(window[i]){console.log(window[i].prototype)}}
for (i in document){if(document[i]){console.log(document[i].prototype)}}
生成器函数和箭头函数不能new
prototype,显式原型 通常是自己写的,自己设置,针对构造函数
__proto__隐式原型,自己生成,一般不改,主要针对实例化对象
constructor 构造器prototype的反方向,主要针对构造函数的显式原型
function a(){debugger;console.log(11111)};
new a()
new a
new 函数是会被执行的
构造函数的实例化对象不存在prototype,只有构造函数存在.
foo.prototype.constructor = Foo.prototypr.constructor
Foo.__proto__指向一个空函数
Function.proto ==Function.prototype 都指向空函数
Number.prototype特别像 new Number
instanceof,用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上语法:object instanceof consyructor
object 实例对象, constructor某个构造函数