前言 JavaScript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存. [原理]找出那些不再继续使用的变量,然后释放其占用的内存.为此,垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间),周期性地执行这一操作. 在学习垃圾回收机制之前让我们先来学习下执行环境及作用域 执行环境 执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对…
执行环境(execution context,为简单起见,有时也称为"环境")是 JavaScript 中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中.虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它. 全局执行环境是最外围的一个执行环境.根据 ECMAScript 实现所在的宿主环境不同,表示执行环境的对…
javascript执行环境(执行期上下文) 当js控制器(control)进入可执行代码时,控制器会进入一个执行环境,活动的多个执行环境构成执行环境栈,最上面的是正在运行的执行环境,当控制器进入一个新的执行环境时,新的执行环境被放到栈最顶端. 执行环境包含以下三个组件: 组件 作用目的 词法环境 执行环境内的代码创建的标识符引用的一个词法环境对象 变量环境 执行环境内的代码通过变量表达式和函数表达式创建的绑定的一个词法环境对象. this绑定 指定该执行环境内的this关键字所关联的值. 执行…
最近在重读<javascript高级程序设计3>,觉得应该写一些博客记录一下学习的一些知识,不然都忘光啦.今天要总结的是js执行环境和作用域. 首先来说一下执行环境 一.执行环境 书上概念,执行环境定义了变量或者函数有权访问的其他数据,决定了他们各自的行为.每个执行环境都有一个与之关联的变量对象.环境中定义的所有变量和函数都保存在这个对象中.虽然我们在编写代码的时候无法访问这个对象,但解析器在处理数据时会在后台用到它. 执行环境是一个概念,一种机制,它定义了变量或函数是否有权访问其他数据 在j…
前言 这几天在看<javascript高级程序设计>,看到执行环境和作用域链的时候,就有些模糊了.书中还是讲的不够具体. 通过上网查资料,特来总结,以备回顾和修正. 要讲的依次为: EC(执行环境或者执行上下文,Execution Context) ECS(执行环境栈Execution Context Stack) VO(变量对象,Variable Object)|AO(活动对象,Active Object) scope chain(作用域链)和[[scope]]属性 EC 每当控制器到达EC…
总结自<高程三>第四章  理解Javascript_12_执行模型浅析   JS的执行环境与作用域  javascript高级程序第三版学习笔记[执行环境.作用域] 在javascript中,可执行的JavaScript代码分三种类型: 1. Global Code,即全局的.不在任何函数里面的代码,例如:一个js文件.嵌入在HTML页面中的js代码等. 2. Eval Code,即使用eval()函数动态执行的JS代码. 3. Function Code,即用户自定义函数中的函数体JS代码.…
前言 这几天在看<javascript高级程序设计>,看到执行环境和作用域链的时候,就有些模糊了.书中还是讲的不够具体.通过上网查资料,特来总结,以备回顾和修正. 目录: EC(执行环境或者执行上下文,Execution Context) ECS(执行环境栈Execution Context Stack) VO(变量对象,Variable Object)|AO(活动对象,Active Object) Scope Chain(作用域链)和[[Scope]]属性 EC——执行环境或执行上下文 每当…
1.执行环境 执行环境是JavaScript中国最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为.每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中.虽然我们编写代码无法访问这个对象,但解析器在处理数据时会在后台使用它. 全局执行环境时最外围的一个执行环境.根据ECMAScript事先实现所在的宿主环境不同,表示执行环境的对象也不一样.在Web浏览器中,全局执行环境被认为是window对象,一次所有全局变量和函数都是最为win…
执行环境 什么是执行环境 提起作用域,我们不得不说说什么是执行环境.执行环境定义了变量或函数有权访问的其他数据,并决定其各自的行为.每一个执行环境都有一个对应的变量对象,这个对象的作用就是保存在环境中定义的变量和函数(这个变量对象我们无法直接使用). 全局执行环境 在JavaScript中window对象表示的是全局执行环境,全局执行环境是最外围的环境,所有的全局变量和函数都是作为window对象的属性和方法的.这个执行环境在浏览器关闭时才进行销毁,也就是说window执行环境的生命周期贯穿整个…
这篇文章比较清晰的解释了一些作用域链相关的概念,忍不住收藏了 原文地址:http://segmentfault.com/a/1190000000533094 前言 这几天在看<javascript高级程序设计>,看到执行环境和作用域链的时候,就有些模糊了.书中还是讲的不够具体.通过上网查资料,特来总结,以备回顾和修正. 要讲的依次为: EC(执行环境或者执行上下文,Execution Context) ECS(执行环境栈Execution Context Stack) VO(变量对象,Vari…
执行环境定义了变量或函数有权访问的其他数据,决定了它们的各自行为.每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中,虽然我们无法访问这个对象,但是解析器在处理数据时会在后台使用它. 全局执行环境是最外围的一个环境,在web浏览器中,全局执行环境被认为是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的. 某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之全部被销毁. 当代码在一个环境中执行时,…
在javascript脚步语言中执行环境有两种: 全局环境: 局部环境: 我们可以拿一个田径跑道来打比方,全局环境就可以理解为是最外面跑道,它包含着内部所有的东西,有人在跑步,有人在跳远,这些用着不同特色方法比赛的人都在这个跑道里面,被全局环境包含着 那么在浏览器当中,全局也被认作是window,所有活动在内的都被视作为是window对象内的 而局部环境往往在函数被创建的时候拥有.当一个环境被创建执行,它内部的代码块就拥有独立的作用域,也就是说javascript规则定义了函数内部的运行规范,我…
执行环境(execution context,为简单起见,有时也成为“环境”)是javascript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中.虽然我们编写的代码无法访问这个对象,但解析器在处理数据是会在后台使用他. 这段话中着重介绍了执行环境的这个概念,这个执行环境的作用是定义了一种行为.这种行为定义了变量或者函数访问其他数据的权限…
一.执行环境 执行环境(也叫做执行上下文,Execution Context)是Javascript中最为重要的一个概念.执行环境定义了变量或函数有权访问其他数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象,执行环境中定义的所有变量和函数都保存在这个对象中.虽然我们编写的代码无法访问这个对象,但解析器在处理时会在后台使用它. 全局执行环境是最外围的一个执行环境.根据ECMAScript实现所在的宿主环境不同,表示执行环境的对象也不一样.在web浏览器中,全局执行环境被认为是wi…
执行环境是javascript中最为重要的一个概念. 执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为. 每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中(我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它). 全局执行环境:最外围的执行环境(Web浏览器中认为window对象是全局执行环境,此刻所有全局变量和函数都是作为window对象的属性和方法创建的) 某个执行环境中的所有代码执行完毕后,…
执行环境 可以把执行环境想象为一个圆圈,里面包含了一些变量.函数. 执行环境定义了变量或函数的有权访问的其他数据,决定了它们各自的行为.还有一个顶部执行环境.在浏览器中,顶部执行环境既为window,它在关闭浏览器过后会销毁此执行环境. 变量对象 可以把变量对象想象为圆圈的管家,它管理着当前执行环境里所有的变量和函数. 每一个执行环境都有一个变量对象,执行环境中所有的变量和函数都保存在这个变量对象中,但是这个变量对象我们无法通过代码进行访问. 环境栈 可以把环境栈想象成用于装置当前需要载入的执行…
一.执行环境 执行环境定义了变量和函数有权访问的其他数据,决定了他们各自的行为:每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中.虽然我们编写的代码无法访问这个对象,但解析器处理数据时会在后台使用它. 全局执行环境是最外围的一个执行环境,在web浏览器中,全局执行环境被认为是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的.某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁. 每个函数都…
首先看下这条语句: (function($) {…})(jQuery): 1.原理: function(arg){…}这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写上括号和实参的,由于操作符的优先级,函数本身也需要用括号,即:(function(arg){…})(param)这就相当于定义了一个参数为arg的匿名函数,并且将param作为参数来调用这个匿名函数 而(function($){…})(jQuery)则是一样的,之所以只在形参使用$,是为了不与其他库冲突,所以实参用…
所有变量(包括基本类型和引用类型)都存在一个执行环境(也称为作用域)当中,这个执行环境决定了变量的生命周期,以及哪一部分可以访问其中的变量. 以下是关于执行环境的几点总结: 执行环境有全局执行环境(全局环境)和函数执行环境之分: 每次进入一个新的执行环境,都会创建一个用于搜索变量和函数的作用域链: 函数的局部环境不仅有权访问函数作用域中的变量,而且有权访问其包含(父)环境,乃至全局环境: 全局变量只能访问在全局环境中定义的变量,而不能直接访问局部环境中的任何数据: 变量的执行有助于确定应该何时释…
执行环境(Execution Context,也称为"执行上下文")是JavaScript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其它数据,决定了各自的行为.当JavaScript代码执行的时候,会进入不同的执行环境,这些不同的执行环境就构成了执行环境栈. JavaScript中主要存在三种执行环境: 全局执行环境 JavaScript代码执行的默认环境.通常被默认为window对象,所有的全局变量和函数都作为window对象的属性和方法存在.当执行环境中的代码执行完毕…
JavaScript引擎在开始编译代码的时候,会对JavaScript代码进行一次预编译,生成一个执行环境,比如如下代码: window.onload=function(){ function sub(a,b){ return a-b; } var result=sub(5,10); } 就会生成如下图所示的一个类似嵌套的执行环境的逻辑结构视图, 说明:这些执行环境(也叫作用域)都会有一个变量对象,这些变量对象保存着该执行环境(作用域)中的所有变量与函数的名和值,虽然JavaScript代码还没…
一.执行环境 在有关于JavaScript对象或者this的指向问题时,脱离不了的另外一个概念就是执行环境,即上下文环境.执行环境在JavaScript是一个 很重要的概念,因为它定义了变量或函数有权访问的其它数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象,在该环境中定义的所有变量和 函数都保存在这个对象中. 全局环境时最外围的一个执行环境.在Web浏览器中,全局环境被认为是Window对象(后续笔记中会讨论),因此所有的全局变量和函数都是作为window对象的属性或者方法创…
什么是JS的执行环境? function funA(){ //一段代码静静的躺在这里,不能叫执行环境 } funA(); //当代码开始执行以后,系统会将它存入执行栈,并为他准备好足够的内存空间使用 //并安排相关线程辅助这个函数的执行.环境就诞生了 简单的说,一个运行中的函数,即为执行环境 什么是Js的变量对象(活动对象)? 用来存储代码执行时的数据(变量对象等),叫做变量对象 window对象是一个持续存在的对象,负责存储全局环境下的所有变量和对象 因此,window对象看做一个变量对象.主…
古往今来最难的学的武功(javascript)算其一. 欲练此功必先自宫,愿少侠习的此功,笑傲江湖. 你将了解 执行栈(Execution stack) 执行上下文(Execution Context) 作用域链(scope chains) 变量提升(hoisting) 闭包(closures) this 绑定 执行栈 又叫调用栈,具有 LIFO(last in first out 后进先出)结构,用于存储在代码执行期间创建的所有执行上下文. 当 JavaScript 引擎首次读取你的脚本时,它…
执行上下文 顾名思意就知道他是动态的,只在代码运行的时候产生 作用域 顾名思意就知道它是一个"领域",并且这个"领域"在一开始就规划好, 不会在改, var d; function fnd(){ console.log(d);//undefined }; (function(f){ var d=20; f(); }(fnd)); 上面的例子就很好的说明了这一点,因为在javascript中只有函数能生成作用域,在加上作用域在一开始就固定了 >这样我们就可以推测…
作用域的原理,对JS将如何解析标识符做出了解答.而作用域的形成与执行环境和活动对象紧密相关. 我们对于JS标识符解析的判断,存在一个常见误区 首先,看一个关于JS标识符解析的问题 ,源于风雪之隅提出的问题 var name = 'globalName'; function funcA() { console.log(name); var name = 'funAName'; console.log(name); console.log(age); } funcA(); 这段代码的运行结果是怎样的…
var a=1; function b(x){ var c=2; console.log(x); } b(3); ·执行环境(execution context),也称为环境.执行上下文.上下文环境.执行上下文环境: 每次当控制器转到ECMAScript可执行代码的时候,即会进入到一个执行上下文.执行上下文(简称-EC)是ECMA-262标准里的一个抽象概念,用于同可执行代码(executable code,分为全局代码.函数代码和eval代码)概念进行区分. 通俗的话来讲就是,JS中的函数运行…
本文主要从原理入手分享变量和作用域的相关知识,最后结合本文所分享知识,再次深入了解下闭包的运行原理. 主要参考<JS高级程序设计> <JS权威指南> <高性能 JS> 三本书. 目录 1 变量 1.1 变量的声明 1.2 变量类型的特点 2 执行环境和作用域 3 再谈谈闭包 变量 对 JavaScript 稍微有点了解的同学都知道,JavaScript 中的变量与其他语言的变量有很大区别. JS 的弱类型的特性决定了变量只是在特定时间(生命周期,作用域中)用于保存特定值…
一.闭包 JavaScript中允许嵌套函数,允许函数用作数据(可以把函数赋值给变量,存储在对象属性中,存储在数组元素中),并且使用词法作用域,这些因素相互交互,创造了惊人的,强大的闭包效果.[update20170501] 闭包就是指有权访问 另一个函数作用域 中的变量 的函数 !!! 好处:灵活方便,可封装 缺点:空间浪费.内存泄露.性能消耗 由于闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存.过度使用闭包可能会导致内存占用过多,建议只在绝对必要时再考虑使用闭包.虽然像V8等…
知识内容: 1.JavaScript函数 2.JavaScript全局函数及特殊函数 3.JavaScript作用域 4.本节练习 参考资料:<JavaScript高级程序设计> 一.JavaScript中的函数 1.函数的定义 学完python后,对函数的定义一定不再陌生了,函数对于任何一个语言来说都是核心的概念.通过函数我们可以封装任意多条语句,而且可以在任何地方任何时候调用执行.JavaScript中的函数使用function来声明定义,函数的基本语法如下: 1 function fun…