谈谈我对JavaScript原型和闭包系列理解_javascript技

作者: 全球彩票官网下载  发布:2020-01-03

相关阅读:谈谈我对JavaScript原型和闭包系列理解 谈谈我对JavaScript原型和闭包系列理解

什么是闭包

闭包是什么?闭包是Closure,这是静态语言所不具有的一个新特性。但是闭包也不是什么复杂到不可理解的东西,简而言之,闭包就是:

• 闭包就是函数的局部变量集合,只是这些局部变量在函数返回后会继续存在。

• 闭包就是就是函数的“堆栈”在函数返回后并不释放,我们也可以理解为这些函数堆栈并不在栈上分配而是在堆上分配

• 当在一个函数内定义另外一个函数就会产生闭包

什么是原型?

原型是一个对象,其他对象可以通过它实现属性继承。

任何一个对象都可以成为原型么?

哪些对象有原型

所有的对象在默认的情况下都有一个原型,因为原型本身也是对象,所以每个原型自身又有一个原型(只有一种例外,默认的对象原型在原型链的顶端).

执行上下文

每次当控制器转到ECMAScript可执行代码的时候,即会进入到一个执行上下文。

执行上下文是一个抽象概念,ECMA-262标准用这个概念同可执行代码概念进行区分。

标准规范没有从技术实现的角度准确定义EC的类型和结构;这应该是具体实现ECMAScript引擎时要考虑的问题。

活动的执行上下文在逻辑上组成一个堆栈。堆栈底部永远都是全局上下文,堆栈顶部是当前执行上下文。堆栈在EC类型的变量被推入或弹出的同时被修改。


情况一: 在一段js代码拿过来真正一句一句运行之前,浏览器已经做了一些“准备工作”,其中就包括对变量的声明,而不是赋值。变量赋值时在赋值语句执行的时候进行的。

情况二: 在“准备工作”阶段,this是直接赋值的。

复制代码 代码如下:console.log //Window

情况三: 函数: 函数表达式和函数声明

 console.log {}function f1() {} //函数声明console.log; //undefinedvar f2 = function() {}; //函数表达式 

“准备工作”总结:

•变量、函数表达式————变量声明,默认赋值为undefined

•this————赋值

•函数声明————赋值

这三种数据的准备情况我们称之为“执行上下文”或者“执行上下文环境”。


javascript在执行一个代码段之前,都会进行这些“准备工作”来生成执行上下文。这个“代码段”分为三种情况--全局代码、函数代码、Eval代码。

 //全局代码段 //代码段...//函数代码段function fn { console.log;}var fn = new Function("x", "console.log;//Eval代码段eval; { eval;alert; //"y" is not defined//因为eval涉及到安全问题,所以尽量不用。 

在函数中,除了“准备工作”的几种情况,还会有其他数据

 function fn { console.log; //[10] conosole.log; 

以上代码展示了在函数体的语句执行之前,arguments变量和函数参数都已经被赋值。

函数每被调用一次,都会产生一个新的上下文执行环境。因为不同调用那个就可能产生不同的参数。

函数在定义的时候就已经确定了函数体内部自由变量的作用域。

 var a = 10;function fn; //a是自由变量} //函数创建时,就确定了a要取值的作用域function bar; //打印"10",而不是"20"}bar; 

总结:

全局代码的上下文环境数据内容为:

•普通变量,如:var a = 10 | ===> 声明

•函数声明,如function fn() {} | ===> 赋值

•this | ===> 赋值

函数体

•参数 | ===> 赋值

•arguments | ===> 赋值

•自由变量的取值作用域 | ====> 赋值

通俗的定义:

在执行代码之前,把将要用到的所有变量都事先拿出来,有的直接赋值了,有的先用undefined占个位。

以上内容是小编给大家分享的JavaScript原型和闭包系列理解的全部叙述,希望大家喜欢。

本文由全球彩票历史版本发布于全球彩票官网下载,转载请注明出处:谈谈我对JavaScript原型和闭包系列理解_javascript技

关键词:

上一篇:jQuery打字效果实现方法_jquery_脚本之家
下一篇:没有了