第二章-函数

1 函数的定义和调用

  基本格式

function 函数名(参数列表){
    函数体
}

  函数体中的return一旦执行, 函数就不在执行而是返回了

  如果没有return, 则函数执行完毕就结束, 返回的值是undefined

  第二种函数定义

var 函数名 = function (参数列表){
    函数体
};

  注意最后严谨一点加上分号表示赋值语句结束, 整个句子表示将函数赋值给一个变量, 该变量(参数列表) 就可以执行函数了

  调用函数

    函数名(参数列表);

    函数赋值的变量(参数列表);

  JavaScript有个十分随意的设定, 传入的参数是, 可以传入多余需要的参数, js会按照顺序得到需要的参数, 剩余的参数不管, 不会报错, 同理少传入参数也没有关系, 缺少的参数会设置为undefined

  在函数内部, 有个特殊变量arguments

  该变量存储传入进来的所有参数, 可以用类似于数组的方式获得数据

  

  配合arguments使用的是rest, 它可以排除函数定义的参数列表的参数

  

    当传入的参数少于参数列表的参数, rest得到的是一个空数组, 而不是undefined

  特殊注意:

    JavaScript尽管可以不加分号, 但是它实际上会在一行的末尾自动添加上分号

    这点就可能造成一下误会, 比如return与后面的返回值写成了两行, 那么其实际情况会是return; 返回语句;这样就出意外了

    

2 变量作用域

  在函数内定义的变量的作用域只是函数, 函数外面无法引用到函数内部定义的变量

  函数可以嵌套, 内部函数可以使用外部函数的变量, 但反过来不行

  变量的查找也是从内向外查找的

  特殊注意:变量提升

    JavaScript在函数中有一个十分诡异的操作

    它会先过一遍函数体, 然后把所有变量声明提到函数体首部

    

  因此在函数中, 一定要养成先定义变量的好习惯

  不在任何函数内定义的变量就具有全局作用域

  事实上, 是将该变量绑定给了特殊对象windows

  

  因此JavaScript只有一个全局作用域

  为了解决这个问题, 可以使用名字空间

  定义一个全局变量, 这个变量是个对象类型, 以后就往这个对象上添加内容就好了, 这样就会减少重名的情况

  for循环不能形成局部作用域, 要使得for中的变量是局部的, 需要使用关键字let

  let用于代替var声明一个块级作用域的变量

  常量, 名字的所有字母用大写形式表示, 尽管它确实可以被修改, 但是不要修改它

  常量可以用const来定义

3 方法

  绑定给对象的函数叫做方法

  在方法中, 有个特殊的变量this, 这个值始终指向当前对象

  

  但是如果直接调用计算age的方法, 就会出现预期之外的答案

  

  原因是, this会视情况而定指向谁, xiaoming.age就是执行的xiaoming, getAge()实际上是windows.getAge()所以指向的是windows

  

  

时间: 2024-11-06 13:11:28

第二章-函数的相关文章

C++模板编程 - 第二章 - 函数模板

模板被编译两次 书上说模板被编译两次:一次是实例化之前,检查模板代码本身,这个好理解,就是检查和模板没有关系的代码:第二次编译是在实例化的时候,看看把类型带入进去有没有问题,比如说字符串没有除法. 还有一个需要注意的问题:模板在进行实例化的时候,编译器要能够看到模板的定义.下面的代码会挂掉,因为main.cpp把max.h包含进来,但是其中没有max的实现 1 // max.h 2 template<typename T> 3 max..... 4 5 // max.cpp 6 #includ

Head First Python 第二章 函数模块&amp;第三章 文件与异常&amp;第四章 持久存储&amp;第五章 处理数据

第三章 1.共享模块 模块和发布工具箱全世界共享模块 编写函数,以.py为文件后缀名,第三方库都在PyPI *注释代码:三引号(单双都可以) 发布过程P40 使用发布工具,函数模块变成了一个“发布”,可以使用import导入其他程序 2.如果函数模块功能不满意 添加参数以供api选择比添加函数工作量小! 首先考虑BIF内置函数 ----------------------------------------------------------- 第四章 1.文件 open()语句,readlin

python第二章函数以及常用模块

装饰器: 定义:本质是函数,(装饰其他的函数)就是为其他函数添加附加功能 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 实现装饰器的知识储备 1,函数即"变量" 2,高阶函数 a:把一个函数名当做实参传给另一个函数 b:返回值包含函数名 3,嵌套函数 高阶函数+嵌套函数==装饰器 import time def timemer(func): def wrapper(*args,**kwargs): start_time=time.time() func(*

Python函数(第二章:函数)

a-如何创建函数. b-给出一些指导原则,帮助思考如何创建和组织程序以使用函数. c-如何编写函数,使随后可以询问它们的工作方式和实现的功能. 2.1将程序放在单独的文件里 为了更加方便,从现在开始,应当在python的代码编辑器中输入正在使用的程序,并将本书的事例放在一个文件中,以便以后引用和运行这个事例.一个可行的建议是将该目录命名为“Learning Python”,之后能够以程序出现的章节命名他们. 2.2函数:在一个名称下聚集代码 现代程序语言中提供来讲代码聚集在一个名称下的功能,无论

《linux内核设计与实现》第二章

第二章 从内核出发 一.获取内核源码 1.使用Git(linux创造的系统) 使用git来获取最新提交到linux版本树的一个副本: $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 下载代码后,更新分支到Linux的最新分支: $ git pull 这两个命令可以获取并随时保持与内核官方的代码树一致. 2.安装内核源代码 压缩形式是bzip2,则运行: $ tar xvjf linu

大道至简第二章—懒人的方法

大道至简第二章—懒人的方法 僰道有故蜀王兵阑亦有神,作大滩江中.其崖崭峻,不可凿:乃积薪烧之.故其处悬崖有赤白五色. ----华阳国志卷三-蜀志 在第一章中作者引用愚公移山的典故向我们介绍了编程的精义,以愚公为例向我们介绍了个编程人员应具备的素质.而在第二章,作者通过蜀郡太守李冰烧石破山建造都江堰的故事告诉我们我们只是勤奋是不够的.如果李冰像愚公那样日复一日的敲石碎山,就不会有空闲时间去观察,去思考了.那也不会有“积薪烧之”的事情了.所以李冰乃是闲人一枚. 人的精力是有限的.愚公而愚公可以多吃点

[原创译书] JS函数式编程 第二章总结

?? Functional Programming in Javascript 主目录第二章 函数式编程基础上一节 函数式程序员的工具集 第二章总结 为了理解函数式编程,这章覆盖了很大范围的主题.首先我们分析了一个编程语言的函数式是什么意思, 并且评估了Javascript函数式编程能力.接下来,我们用Javascript实现了一些函数式编程的核心概念, 并展示了一些Javascript内建的函数式编程函数. 尽管Javascript有一些函数式编程的工具,它函数式编程核心的大部分仍被隐藏着,并

linux程序设计——shell程序设计(第二章)

第二章    shell程序设计 本章介绍以下内容: 什么是shell 基本思路 微妙的语法:变量,条件判断和程序控制 命令列表 函数 命令和命令的执行 here文档 调试 grep命令和正则表达式 find命令 shell执行shell程序,这些程序通常称为脚本,它们是在运行时解释执行的.这使得调试工作比较容易进行,因为可以逐行地执行指令,而且节省了重新编译的时间.然而,这也使得shell不适合用来完成时间紧迫型和处理器忙碌型的任务. UNIX架构非常依赖于代码的高度可重用性,如果你编写了一个

一维向量旋转算法 编程珠玑 第二章

看了编程珠玑第二章,这里面讲了三道题目,这里说一下第二题,一维向量旋转算法. 题目:将一个n元一维向量(例数组)向左旋转i个位置. 解决方法:书上讲解了5种方法,自己只想起来2种最简单方法(下面讲的前两种). 1.原始方法. 从左向右依次移动一位,对所有数据平移:这样循环i次,算法最坏时间复杂度达n^2.耗时不推荐. 2.空间换时间. 顾名思义,申请一个i长度的空间,把前i半部分放到申请空间中,再把后面的所有数据向左移动i个位置,最后把申请的空间中的数据放到后半部分.浪费空间,不推荐. 3.杂技