1.JavaScript实现是由ECMAScript、DOM和BOM组成。
a.ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象.
b.DOM[文档对象模型]是HTML和XML的应用程序接口,DOM将把整个页面规划成由节点层级构成的文档。
c.BOM[浏览器对象模型]可以对浏览器窗口进行访问和操作。

JS对象有:Array Boolean Date Math Number String RegExp Functions Events
Browser对象有:Window Navigator Screen History Location
DOM对象有:Document Element AttributeEvent

2.ECMAScript函数
a. arguments对象,无需明确指出参数名,就能访问参数。
1)比如:
function a(a){
alert(arguments[0]);
}
a(1);
执行结果将是弹出框显示1;
2)ECMAScript不会验证传递给函数的参数个数是否等于函数定义的参数个数。
比如:
function a(a,b){
alert(arguments[0]);
}
只传一个参数仍然正常执行。
a(1);
3)检测函数的参数个数 用arguments.length

b.Function 对象
ECMAScript 的函数实际上是功能完整的对象。

<script>
var a = n // 1实例化Function类对象
var func = new Function("a","b","alert(a+b);");
func(1,2);//弹出3 // 2 重载func函数 (其实也是func值被改成了指向不同对象的指针,函数名只是指向函数对象的引用值)
var func = new Function("a","b","alert(a);");
func(1,2);//弹出1 // 3使两个变量指向同一个函数
var nfunc = func;
nfunc(1,2);//弹出1 // 4另外两种写法
var func = function(a,b){
alert(a);
} function func(a,b){
alert(a);
}
//所以 函数只不过是一种引用类型
</script>

  

3.闭包
由于Javascript语言特有的"链式作用域"结构,
有个问题:函数外部无法读取函数内的局部变量
怎么实现:在函数内部,再定义一个函数

<script>
//函数a1
function a1(){
//局部变量
var n = 1;
//子函数a2
function a2(){
console.log(n);
}
//声明全局、匿名函数
_do = function(){n++;}
// 返回a2的引用
return a2;
}
//拿到a2的引用
var a2 = a1();
//执行
a2();//结果1
_do();
a2();//结果2
</script>

  

其实 a2 可以写成 a2 = function(){},也就是说a2被赋给了一个全局变量,a2始终在内存中,a1是a2的父函数,所以a1也一直在内存中,不会在调用结束后,被垃圾回收机制回收。
总结:
1.闭包会使得函数中的变量都被保存在内存中。
2.闭包会在父函数外部,改变父函数内部变量的值。

JavaScript的3大组成部分&&ECMAScript函数&&闭包的更多相关文章

  1. JavaScript碎片—函数闭包(模拟面向对象)

    经过这几天的博客浏览,让我见识大涨,其中有一篇让我感触犹深,JavaScript语言本身是没有面向对象的,但是那些大神们却深深的模拟出来了面向对象,让我震撼不已.本篇博客就是在此基础上加上自己的认知, ...

  2. javascript函数闭包(closure)

    一,首先感受下javascript函数的闭包 二,闭包 1,定义:闭包就是能够读取其他函数内部变量的函数,由于在javascript语言中,只有在函数内部的子函数才能够读取局部变量,因此可以把闭包简单 ...

  3. javascript闭包—围观大神如何解释闭包

    闭包的概念已经出来很长时间了,网上资源一大把,本着拿来主意的方法来看看. 这一篇文章 学习Javascript闭包(Closure) 是大神阮一峰的博文,作者循序渐进,讲的很透彻.下面一一剖析. 1. ...

  4. JavaScript碎片———函数闭包(模拟面向对象)

    经过这几天的博客浏览,让我见识大涨,其中有一篇让我感触犹深,JavaScript语言本身是没有面向对象的,但是那些大神们却深深的模拟出来了面向对象,让我震撼不已.本篇博客就是在此基础上加上自己的认知, ...

  5. JavaScript组成部分——ECMAScript、DOM、BOM、

    1.JavaScript组成部分 虽然 JavaScript 和 ECMAScript 通常被人们用来表达相同的含义,但 JavaScript 的含义却比ECMA-262标准中规定的要多得多. 一个完 ...

  6. JavaScript的函数闭包详细解释

    闭包是指有权访问另一个函数作用域中的变量的函数 一.创建闭包的常见的方式: 就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量. //通过闭包可以返回局部变量 function b ...

  7. JavaScript进阶系列01,函数的声明,函数参数,函数闭包

    本篇主要体验JavaScript函数的声明.函数参数以及函数闭包. □ 函数的声明 ※ 声明全局函数 通常这样声明函数: function doSth() { alert("可以在任何时候调 ...

  8. JavaScript学习总结-技巧、有用函数、简洁方法、编程细节

    整理JavaScript方面的一些技巧.比較有用的函数,常见功能实现方法,仅作參考 变量转换 //edit http://www.lai18.com var myVar = "3.14159 ...

  9. JavaScript中的apply和call函数详解(转)

    每个JavaScript函数都会有很多附属的(attached)方法,包括toString().call()以及apply().听起来,你是否会感到奇怪,一个函数可能会有属于它自己的方法,但是记住,J ...

随机推荐

  1. ubuntu 创建用户

    http://www.jb51.net/article/45848.htm  创建用户

  2. 安装oracle常见问题和解决方案

    ./runInstaller: line 95: [: too many arguments ./runInstaller: line 99: /home/oracle/oracle/database ...

  3. 【MongoDB】C#中的Mongo数据类型转换

    用过Mongo的人都知道,Mongo使用的是Bson类型,有string,int,date,bool等数据类型,具体就不详述了. 在使用Mongo 的C#官方驱动时会碰到一个问题,如何将Bson中的数 ...

  4. ProgressBar显示进度值,垂直或者水平滚动条

    过去一段时间,在研究Windows的系统控件ProgressBar,一直奇怪为啥它不能显示进度值,本以为是个很简单的问题,结果搜索很久,也没有找到好的解决方案,最后终于找到一个Perfect方案,特记 ...

  5. activity 、window与view的关系(下)

    在activity的attacth方法中,通过policymanager 的makenewwindow来创建window 而window的具体实现是phonewindow 接下来通过setconten ...

  6. 一言不合敲代码(1)——DIV+CSS3制作哆啦A梦头像

    先展示一下我的头像吧. 作为一个前端ER,我的头像当然不能是绘画工具画出来的.没错,这个玩意是由HTML+CSS代码实现的,过年的某一天晚上无聊花了一个小时敲出来的.来看看它原本的样子: 为什么会变成 ...

  7. JSON字符串语法

    JSON 语法是 JavaScript 对象表示语法的子集. 数据在键/值对中展示, 多个数据由逗号分隔, 花括号保存一个对象, 方括号保存一个数组 JSON具有以下形式: 1. 对象(object) ...

  8. POJ 2251 题解

    Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27520   Accepted: 10776 ...

  9. css样式表分类、选择器分类、css基础样式

    1 . 样式表  Cascading Style Sheet      css优势: 内容与表现分离 网页的表现统一,容易修改 丰富的样式,使网页布局更加灵活 减少网页代码量,增加网页的浏览速度,节省 ...

  10. .net core 关键概念

    startup       startup asp.net core 的入口,在构造函数中完成环境参数的配置. 其中Configure 方法是用来控制如何respond一个http请求的, 例如配置l ...