JavaScript的3大组成部分&&ECMAScript函数&&闭包
Posted 多多明明
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript的3大组成部分&&ECMAScript函数&&闭包相关的知识,希望对你有一定的参考价值。
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函数&&闭包的主要内容,如果未能解决你的问题,请参考以下文章
Javascript-关于nullundefined空字符串的区分