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. MySQL Binlog Mixed模式记录成Row格式

    背景: 一个简单的主从结构,主的binlog format是Mixed模式,在执行一条简单的导入语句时,通过mysqlbinlog导出发现记录的Binlog全部变成了Row的格式(明明设置的是Mixe ...

  2. caffe下训练时遇到的一些问题汇总

    1.报错:“db_lmdb.hpp:14] Check failed:mdb_status ==0(112 vs.0)磁盘空间不足.” 这问题是由于lmdb在windows下无法使用lmdb的库,所以 ...

  3. Android开发之---AIDL

    在Android开发中,有时会用到多进程通信,这时,可选的方案为: 1. Bundle    :四大组件之间的进程间通信 2. 文件共享   :适合无并发情景 3. Messager : 低并发的一对 ...

  4. oracle 11g crs检测结果

    +ASM1@testdb11a /oracle/media/grid$ ./runcluvfy.sh stage -pre crsinst -n testdb11a,testdb11b -verbos ...

  5. Maven入门指南① :Maven 快速入门及简单使用

    原文链接:http://www.cnblogs.com/luotaoyeah/archive/2014/06/02/3764533.html 开发环境 MyEclipse 2014 JDK 1.8 M ...

  6. sprintf溢出的bug

    向printf.sprintf这种函数在编译时很难检查错误,所以程序员必须小心.比如我就遇到了这样的bug: void test() { ]; sprintf(t,"); } //执行spr ...

  7. Alpha 测试

    活动助手Alpha--测试篇 测试分工 人员 分工 测试 牛姐 Android开发/ui设计 功能测试 橙汁 Android开发 功能测试 洪 数据库开发 数据库结构测试 佳凯 数据库设计与开发 接口 ...

  8. iOS @@创建NSURL的字面量

    @@ 是创建 NSURL 的字面量的绝佳方法(例如:@@"http://example.com")

  9. IIS监控指标

    IIS Global Active Flushed Entries Active Flushed Entries 是缓存文件句柄,当前传输全部完成后将关闭此句柄.IIS Global 对象. Web ...

  10. css3折叠效果

    在开发过程中,经常会遇到一些交互效果,今天所联系的便是一个类似折纸的折叠效果,查看效果. 说到折纸,我们先看下图 这是我第一时间想到的大体思路,如果能让这6个面连续的变化角度到0不就可以了吗,运用cs ...