高阶函数满足条件(任意一个即可):1、接受一个或多个函数作为输入。
2、输出一个函数。
闭包满足条件(必须全满足):1、一个函数中要钱讨一个内部函数,并且内部函数要访问外部函数的变量。
2、内部函数要被外部引用。
例:function eat(){
var food = ‘鸡翅‘;
return function(){
console.log(food);
}
}
var look = eat();
look(); // 鸡翅
look(); // 鸡翅
闭包的优缺点:
优点:1:变量长期驻扎在内存中;
2:避免全局变量的污染;
3:私有成员的存在 ;
缺点:常驻内存 会增大内存的使用量 使用不当会造成内存泄露。
执行上下文的生命周期包含2个阶段:建立阶段和执行阶段。
JavaScript中执行环境:
1、全局环境 2、函数环境 3、eval函数环境(已不推荐使用)
执行上下文类型为:1、全局执行上下文 2、函数执行上下文 3、eval函数执行上下文
建立阶段例:
fooExecutionContext = {
variavleObject : {
arguments : {
0 : 10,length : 1
},
// 确定 Arguments 对象
i : 10, // 确定形式参数
c : pointer to function c(), // 确定函数引用
a : undefined, // 局部变量 初始值为 undefined
b : undefined // 局部变量 初始值为undefined
},
scopeChain : {},
this : {}
}
执行阶段例:
fooExecutionContext = {
variavleObject : {
arguments : {
0 : 10,length : 1
},
i : 10,
c : pointer to function c(),
a : "Hello",// a 变量被赋值为 Hello
b : pointer to function privateB() // b 变量被赋值为privateB() 函数、
},
scopeChain : {},
this : {}
}
作用链:
三属性为:变量对象、作用域链以及this
公式:(ScopeChain)=AO+[[scope]]
This:
1、普通函数调用
这个情况没特殊意外,就是指向全局对象-window
2、对象函数调用
this
指向obj
3、构造函数调用
在构造函数里面返回一个对象,会直接返回这个对象,而不是执行构造函数后创建的对象
原文地址:https://www.cnblogs.com/huronghua/p/11963400.html