JavaScript 高级程序设计(第3版)笔记——chapter3:基本概念(函数部分)

3.7函数

3.7.1 理解参数

  • ECMAScript 函数不介意传递进来多个参数,也不在乎传递进来的参数是什么数据类型。因为在 ECMAScript 中的参数在内部是用一个数组来表示的。在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
  • 命名的参数只提供便利,但不是必需的。
  • arguments 对象可以与命名参数一起使用。
  • arguments对象的值永远与对应命名参数的值保持同步。不过,这并不是说读取这两个值会访问相同的内存空间。它们的内存空间是独立的,但它们的值会同步。
  • arguments对象的长度有传入的参数的个数决定,不是由定义函数时的命名参数的个数决定的。没有传递值的命名参数将自动被赋予undefined值。
  • ECMAScript 中所有的参数传递的都是值,不可能通过引用传递参数。

arguments对象与命名参数的关系:

 1 function say_hello(var1, var2, var3) {
 2      var len = arguments.length;
 3      alert(len);
 4      for (i in arguments) {
 5          alert(arguments[i]);
 6      }
 7      alert(var1);
 8      alert(var2);
 9      alert(var3);
10 }
11
12 say_hello(); //0, undefined, undefined, undefined
13 say_hello("first"); // 1, first, first, undefined, undefined
14 say_hello("first", "second", "third"); // 3, first, second, third, first, second, third
15 say_hello("first", "second", "third", "forth");// 4, first, second, third, forth, first, second, third
1 function say_hello(var1, var2, var3) {
2      for (i in arguments) {
3          arguments[i] = "change";
4      }
5      alert(var1 + var2 + var3);
6 }
7
8 say_hello(1,2,3); //changechangechange

3.7.2 没有重载

  • 没有函数签名,真正的重载是不可以做到的。
  • 如果在ECMAScript中定义了两个名字相同的函数,则该名字只属于后定义的函数。
  • 通过检查传入函数中参数的类型和数量并作出不同的反应,可以模拟方法的重载。

没有重载

1 function overLoad (var1) {
2     alert("This is the first function");
3 }
4
5 function overLoad(var1, var2) {
6     alert("This is the second function");
7 }
8
9 overLoad(1); //This is the second function

模拟重载

 1 function overLoad () {
 2     if (arguments.length === 0) {
 3         alert("first");
 4     } else if (arguments.length === 1) {
 5         alert("second");
 6     } else {
 7         alert("third");
 8     }
 9 }
10
11 overLoad(); //first
12 overLoad(1); //second
13 overLoad(1,2,3,4); //third
时间: 2024-10-25 06:30:39

JavaScript 高级程序设计(第3版)笔记——chapter3:基本概念(函数部分)的相关文章

JavaScript高级程序设计(第2版) 笔记2

笔记1中摘录了一些关于JavaScript的简介.组成.基础类型说明等无关精要的知识点,但个人还是觉得这些基础的东西必须了解,毕竟有总比没有好. 而今天也就来说说有时会让初学者疑惑的一些问题,比如JavaScript的变量.作用域和内存等问题,特别需要注意的就是作用域(C#.Java等高级语言开发者你们懂得!),不懂的时候头大是在所难免滴! 不过作为一名开发者(程序猿),遇到这些头大的问题时,只能说明自己还不算“精通”. (四)变量.作用域和内存问题 1.  全局作用域(Global Scope

JavaScript高级程序设计(第3版) 中文pdf扫描版 89M 高清下载

<JavaScript高级程序设计(第3版)>是JavaScript超级畅销书的最新版.ECMAScript5和HTML5在标准之争中双双胜出,使大量专有实现和客户端扩展正式进入规范,同时也为JavaScript增添了很多适应未来发展的新特性. <JavaScript高级程序设计>这一版除增加5章全新内容外,其他章节也有较大幅度的增补和修订,新内容篇幅约占三分之一. 全书从JavaScript语言实现的各个组成部分——语言核心.DOM.BOM.事件模型讲起,深入浅出地探讨了面向对象

《JavaScript高级程序设计》(第二版)

这本书的作者是 Nicholas C.Zakas ,博客地址是 http://www.nczonline.net/ ,大家可以去多关注,雅虎的前端工程师,是YUI的代码贡献者,可想而知这本书得含金量,他出的书都广受好评.这本书已经出了第二版,而且与第一版相比内 容更新很大,直接第二版就行.不要被书名的“高级”唬住,只要有JS基础语法知识和DOM基础知识就行,而且本书开始阶段还是介绍JS和DOM的语法知 识. 评论:重点推荐一下第五章(类型),第六章(OOP),第七章(匿名),多看几遍,至少要完全

《JavaScript高级程序设计(第3版)》.Nicholas.C.Zakas.扫描版.pdf

下载地址:网盘下载 内容简介 编辑 本书从最早期Netscape浏览器中的JavaScript开始讲起,直到当前它对XML和Web服务的具体支持,内容主要涉及JavaScript的语言特点.JavaScript与浏览器的交互.更高级的JavaScript技巧,以及与在Web应用程序中部署JavaScript解决方案有关的问题,如错误处理.调试.安全性.优化/混淆化.XML和Web服务,最后介绍应用所有这些知识来创建动态用户界面. 本书适合有一定编程经验的开发人员阅读,也可作为高校相关专业课程的教

《JavaScript高级程序设计(第二版)》学习(5)函数表达式

声明:这类属于学习笔记,主要是摘录书中内容,比较少的整理.内容经常是跳跃的,建议您阅读书本,收益更大. 定义函数的方式有2种,第一种是函数声明,另一种是函数表达式 函数声明会提升,就是JavaScript引擎先什么都不干,先把函数声明的代码解析一下,那么你是在此之前先用还是后用就无所谓了:但是表达式就没有这种特点,必须在函数表达式之后调用才不会出错. //这个是可以的 sayhi(); function sayhi(){ alert("hi"); } //这种是不行的 sayhi();

《JavaScript高级程序设计 第三版》 前2章 Javascript简介与HTML 读书笔记

第一章:Javascript简介 1.JavaScript诞生于1995年,当时,它的主要目的是处理以前由服务器端语言(如Perl)负责的一些输入验证操作.现在,JavaScript是一种专为与网页交互而设计的脚本语言. 注:Netscape(网景)公司研发,Java是sun公司研发,原名为LiveScript,为了搭上媒体热炒的Java的顺风车,更名为JavaScript 2.微软推出JSript的和网景的JavaScript相竞争,最后微软胜利.ECMA指定了规定并重新命名为ECMAScri

《JavaScript高级程序设计 第3版》-学习笔记-2

P31-P82页 1.相等不相等与全等不全等 相等不相等:先转换后比较.对于只有一个对象,调用valueOf方法得到基本类型值再按基本类型转换:如果两个都是对象,则比较他们是否是同一个对象(引用或指针值比较):null与undefined是相等的,至少有一个为NaN则相等为false,不相等为true: 全等不全等:只比较.只在两个操作数未经转换就相等的情况下返回true,特别的,null与undefined不全等,因为连类型都不同 2.未指定返回值类型的函数返回的是一个特殊的值-undefin

《JavaScript高级程序设计 第3版》-学习笔记-1

P1-P30页 1.<script>标签的属性 async:async(html)  | async="async"(xhtml),表示立即下载脚本,但不马上执行(执行没有了先后顺序),不会暂停构建文档. defer:defer(html)| defer(XHTML),表示立即下载脚本,但延迟到解析到</html>标签才执行脚本. 2.在xhtml中嵌入js代码加CDATA <script> //<![CDATA[ ...code... if(

javascript高级程序设计第三版 读书笔记

第三章   基本概念 1.在JavaScript中是区分大小写的,第一个字符是字母 _ 或者$,其他字符可以试数字 字母 _ 或者$,命名格式要求是驼峰式书写(第一个字母小写,剩下的每个有意义的单词开头大写  比如fontSize) 2.单行注释//  块级注释为/*多行 内容*/ 不得使用关键字和保留字 3.在JavaScript中变量是松散型的   可以为任何一种类型 4.用var操作符定义的变量成为定义该变量的作用域中的局部变量. function test(){ var i = 'hi'

《JavaScript高级程序设计 第3版》-学习笔记-3

P84-P137页, 这一章看的真久,这个月事太多了.有些内容在代码注释里没提出来了 1.JS强大的数组类型,元素类型任意,提供了非常多的操作数组的方法和属性 1 /* 2 数组类型 3 */ 4 5 //stack 6 var colors = ['red','blue']; 7 colors.push('brown'); 8 console.log(colors); 9 console.log(colors.length); 10 var item = colors.pop(); 11 co