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. 分享一些不错的sql语句

    1.说明:复制表(只复制结构,源表名:a   新表名:b)   (Access可用)  法一:select   *   into   b   from   a   where   1 <> ...

  2. Java设计模式之创建型模式

    创建型模式分为五类:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式 一.工厂方法模式:接口-实现类.工厂类

  3. Python之路

    Python学习之路 第一天   Python之路,Day1 - Python基础1介绍.基本语法.流程控制              第一天作业第二天   Python之路,Day2 - Pytho ...

  4. jquery 键盘回车事件

    <input id="search" placeholder="输入要领用的资产条码" id="scanCode" type=&quo ...

  5. 在 windows 环境下安装 redislive

    这是一篇在 windows 环境下安装 redislive 的教程! 项目地址:https://github.com/nkrode/RedisLive 配置文档:http://www.nkrode.c ...

  6. Codeforces Round #222 (Div. 1) D. Developing Game 线段树有效区间合并

    D. Developing Game   Pavel is going to make a game of his dream. However, he knows that he can't mak ...

  7. js实现找质因数

    实现最一个整数的质因数的拆分,例如:90可以才分为2*3*3*5,具体代码如下: <script> var num = prompt('请输入一个整数:','90'); var regex ...

  8. 【DP】HDU 1114

    HDU 1144 Piggy-Bank 题意:有这么个存钱罐,给你空的时候重量和满的时候的重量,再给你N中类型的硬币(给出N种硬币总数量和总重量,可多次使用),问你怎样恰好填满存钱罐,而让填入的硬币数 ...

  9. LINUX内核参数网络相关

    有助于提高网络性能和吞吐量的参数 net.core.somaxconn = 128 已完成连接队列(completed connection queue) (1)三次握手已经完成,但还未被应用层接收( ...

  10. AngularJS 30分钟快速入门【译】

    引用自:http://www.revillweb.com/tutorials/angularjs-in-30-minutes-angularjs-tutorial/,翻译如下: 简介 我三年前开始使用 ...