高阶函数与执行上下文

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

时间: 2024-11-05 18:56:26

高阶函数与执行上下文的相关文章

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

一句话介绍 . 原文地址:https://www.cnblogs.com/jianxian/p/11971073.html

JavaScript 高阶函数 + generator生成器

map/reduce map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果: function pow(x) { return x * x; } var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81] map()传入的参数是pow,即函数对象本身. 你可能会想,不需要map(),写

理解运用JS的闭包、高阶函数、柯里化

一.闭包 1. 闭包的概念 闭包与执行上下文.环境.作用域息息相关 执行上下文 执行上下文是用于跟踪运行时代码求值的一个规范设备,从逻辑上讲,执行上下文是用执行上下文栈(栈.调用栈)来维护的. 代码有几种类型:全局代码.函数代码.eval代码和模块代码:每种代码都是在其执行上下文中求值. 当函数被调用时,就创建了一个新的执行上下文,并被压到栈中 - 此时,它变成一个活动的执行上下文.当函数返回时,此上下文被从栈中弹出 function recursive(flag) { // Exit cond

js 高阶函数 闭包

摘自  https://www.cnblogs.com/bobodeboke/p/5594647.html 建议结合另外一篇关于闭包的文章一起阅读:http://www.cnblogs.com/bobodeboke/p/6127650.html 一.闭包 闭包某种程度上就是函数的内部函数,可以引用外部函数的局部变量.当外部函数退出后,如果内部函数依旧能被访问到,那么内部函数所引用的外部函数的局部变量就也没有消失,该局部变量的生存周期就被延续. 一个经典的例子如下: <script> //thi

闭包和高阶函数

小知识: var test3={ a:'asd'}console.log(test3['a']); Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组 相当于给数组的原型添加全局方法 var toArray = function(s){ 2 try{ 3 return Array.prototype.slice.call(s); 4 } catch(e){ 5 var arr = []; 6 for(var i = 0,len = s

Python高阶函数-闭包

高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 在这里我们首先回忆一下python代码运行的时候遇到函数是怎么做的. 从python解释器开始执行之后,就在内存中开辟了一个空间 每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来. 但是当遇到函数定义的时候解释器只是象征性的将函数名读入内存,表示知道这个函数的存在了,至于函数内部的变量和逻辑解释器根本不关心. 等执行到函数调用的时候,python解释器会再开辟一块内存来存储这个函数里的内容,这个时候,才关注函数里面有哪

【函数】02、匿名函数、生成器、高阶函数

一.匿名函数 1.定义 语法格式: lambda args:expression args:以逗号分隔的参数列表 expression:用到args中各参数的表达式 lambda定义的代码必须是合法的表达式,不能出现多条件语句(可使用if的三元表达式)和非表达式,如for和while等 lambda的首要用途是指定短小的回调函数 lambda将返回一个函数而不是将函数赋值给某变量名 In [77]: lambda x: x+1 Out[77]: <function __main__.<lamb

5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器

一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰器 1.1什么是高阶函数? 1.1.1函数接收的参数,包涵一个函数名. 1.1.2 函数的返回值是一个函数名. 其实这两个条件都很好满足,下面就是一个高阶函数的例子. def test1(): print "hamasaki ayumi" def test2(func): return t

JavaScript设计模式与开发实践-读书笔记(3)闭包和高阶函数

闭包(closure) 闭包的形成与变量的作用域以及变量的生存周期密切相关. 变量的作用域,就是指变量的有效范围. 全局变量和局部变量. 在JavaScript中,函数可以用来创造函数作用域. 变量的生存周期,全局变量的生命周期是永久的,除非我们主动销毁这个全局变量. 对于在函数体内用var关键字声明的局部变量来说,当退出函数时,这些局部变量即失去了它们的价值,它们都会随着函数调用的结束而被销毁. 利用闭包我们可以完成许多奇妙的工作. 闭包的作用: 1.封转变量 闭包可以帮助我们把一些不需要暴露