JavaScript高1

上传人:re****.1 文档编号:570531553 上传时间:2024-08-05 格式:PPT 页数:16 大小:1.06MB
返回 下载 相关 举报
JavaScript高1_第1页
第1页 / 共16页
JavaScript高1_第2页
第2页 / 共16页
JavaScript高1_第3页
第3页 / 共16页
JavaScript高1_第4页
第4页 / 共16页
JavaScript高1_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《JavaScript高1》由会员分享,可在线阅读,更多相关《JavaScript高1(16页珍藏版)》请在金锄头文库上搜索。

1、JavaScriptJavaScript高高1 1javascriptl递归函数l所谓的递归函数就是在函数体内调用本函数。使用递归函数一定要注意,处理不当就会进入死循环。递归函数只有在特定的情况下使用,比如阶乘问题l一个典型阶乘递归函数:lfunctionfactorial(num)if(num=1)return1;elsereturnnum*factorial(num-1);l以下代码可导致出错:lvaranotherFactorial=factorial;factorial=null;alert(anotherFactorial(4);/出错javascriptl闭包l闭包的概念:l上页代

2、码中的f2函数,就是闭包。闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成定义在一个函数内部的函数。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。l闭包的用途:l它的最大用处有两个:l1、可以读取函数内部的变量;l2、让这些变量的值始终保持在内存中。javascriptl闭包l闭包的用途:lfunctionf1()varn=999;nAdd=function()n+=1lfunctionf2()alert(n);returnf2;lvarresult=f1();lresult();/999

3、lnAdd();lresult();/1000lf1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbagecollection)回收。javascriptl闭包l使用闭包的注意点:l1、由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。l2、闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方

4、法(PublicMethod),把内部变量当作它的私有属性(privatevalue),这时一定要小心,不要随便改变父函数内部变量的值。javascriptl闭包l例子:lvarname=TheWindow;lvarobject=name:MyObject,getNameFunc:lfunction()returnfunction()returnthis.name;lalert(object.getNameFunc()();lvarname=TheWindow;lvarobject=name:MyObject,getNameFunc:lfunction()varthat=this;return

5、function()lreturnthat.name;lalert(object.getNameFunc()();javascriptl闭包和自调用(立即执行)函数l函数声明:functionfnName();l使用function关键字声明一个函数,再指定一个函数名,叫函数声明。l函数表达式varfnName=function();l使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式。l匿名函数:function();l使用function关键字声明一个函数,但未给函数命名,所以叫匿名函数,匿名函数属于函数表达式,

6、匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或创建闭包等等。javascriptl闭包和自调用(立即执行)函数lfnName();functionfnName().l/正常,因为提升了函数声明,函数调用可在函数声明之前(预解析)lfnName();varfnName=function().l/报错,变量fnName还未保存对函数的引用,函数调用必须在函数表达式之后l(function()()和(function()()这两种自调用函数的写法,在函数体后面加括号就能立即调用,这个函数必须是函数表达式,不能是函数声明。l(function(a)console.log(

7、a);/firebug输出123,使用()运算符)(123);javascriptl闭包和自调用(立即执行)函数l练习中的代码是错误的,因为变量i从来就没被locked住l当循环执行以后,i已经在循环中走到li元素的总数3l而我们点击的时候才去取i的当前值l所以说无论点击那个li,最终显示的都是li元素的总数3l我们可以使用自调用,因为点击事件是在自执行函数表达式闭包内部li的值作为locked的索引存在,在循环执行结束以后,尽管最后i的值变成了li元素总数3l但闭包内部的index值是没有改变,因为他已经执行完毕了l所以当点击连接的时候,结果就正确了javascriptl闭包和自调用(立即执

8、行)函数l练习:利用自调用函数让下面输出正确结果ll这是第一条alert(0);l这是第二条alert(1);l这是第三条alert(2);lllvaraLi=document.getElementById(test).querySelectorAll(li);lfor(vari=0;iaLi.length;i+)laLii.onclick=function()alert(i);ljavascriptl对象操作lDelete操作符:l之前讲过,这是删除属性的唯一方法。把属性设置为undefined或者null不能真正的删除属性,它只是移除了属性和值的关联l语法:delete对象名.属性名lha

9、sOwnProperty()函数l用途:对象是属性的集合,我们经常会检测集合中成员的所属关系判断某个属性是否属于某个对象l语法:object.hasOwnProperty(proName)javascriptl对象操作lhasOwnProperty()函数lobject为必需参数,是对象的实例lproName必需参数。一个属性名称的字符串值l如果object对象中存在指定名称的属性,则返回true,反之则返回falselhasOwnProperty是JavaScript中唯一一个处理属性但是不查找原型的函数l练习:创建一个cat对象,包含属性:name、sex和color。然后用delete删除name属性,给sex赋值为undefined,给color赋值为null。用hasOwnProperty()函数判断各个属性是否存在

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号