高阶函数与执行上下文

Posted huronghua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高阶函数与执行上下文相关的知识,希望对你有一定的参考价值。

高阶函数与执行上下文

高阶函数满足条件(任意一个即可):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、构造函数调用

在构造函数里面返回一个对象,会直接返回这个对象,而不是执行构造函数后创建的对象

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于高阶函数与执行上下文的主要内容,如果未能解决你的问题,请参考以下文章

JS高阶---作用域与执行上下文

高阶函数:声明实现(定义)与调用

JS高阶---作用域与作用域链

JS高阶---事件循环模式(事件轮询)

Scala笔记--函数式编程

js数组高阶方法reduce经典用法代码分享