【函数的声明格式】
1.函数的声明格式:
function 函数名(参数1,参数2,...){
  函数体代码
  return 返回值;
}


函数的调用:
① 直接调用:函数名(参数1的值,参数2的值,....);
② 时间调用方式:直接在html标签中,使用事件名="函数名()"
<button ondblclick="saySth('哈哈哈','yellow')">点击按钮,打印内容</button>
2.函数的注意事项:
① 函数名必须符合小驼峰法则,(首字母小写,之后每个单词首字母大写)
② 函数名后面的()中,可以有参数,也可以没有参数,分别称为 有参函数 和 无参函数;
③ 声明函数时的参数列表,称为形参列表,形式参数。(变量的名字)
function saySth(str,color){}
调用函数是的参数列表,称为实参列表,实际参数。(变量的赋值)
saySth("hello!!!","red");

④ 函数的形参列表个数,与实参列表个数,没有实际关联关系。
函数参数的个数,取决于实参列表。
如果实参列表的个数<形参列表,则为赋值的形参,将为Undefind。
⑤ 函数可以有返回值,使用return返回结果。
调用函数时,可以使用一个变量接受函数的返回结果。如果函数没有返回值,则接受的结果为undefined;
function fun(){
  return "哈哈";
}
var num = func();   num="哈哈"
⑥ 函数中变量的作用域:
在函数中,使用var声明的变量,为局部变量,只能在函数内部访问;
不用var声明的变量,为全部变量,在函数外面也能访问;
函数的形参列表,默认为函数的举局部变量,只能在函数内部使用。
⑦ 函数的声明与函数的调用,没有先后之分。即,可以在声明函数前,调用函数。
fun(); //声明之前调用可以。
function fun(){}

【匿名函数的声明使用】
1.声明一个匿名函数,直接赋值给某一个事件。
window.onload= function(){}
2.使用匿名函数表达式。将匿名函数,赋值给一个变量。
声明:var func=function (){}
调用:func();

注意:使用匿名函数表达式时,函数的调用,必须放在函数声明语句之后!!!
(与普通函数的区别)
3.自执函数:
① !function(){}();    可以使用多种与运算符开头,一般用!
!function(形参列表){}(实参列表);
② (function(){}());    使用()将函数集函数后的括号包裹。
③ (function(){})();    使用()值包裹函数部分;

三种写法的特点
① 使用!开头结构清晰,不容易混乱,推荐使用;
② 能够表明匿名函数与调用的()为一个整体,官方推荐使用;
③ 无法表示函数与之后剖的()的整体性,不推荐使用;

【函数的内部属性】
1.Arguments对象
① 作用:用于储存调用函数时的所有实参。
当我们调用函数,并用实参赋值时,实际上 到arguments数组中, 可以在函数中,使用arguments[n]的形式调用。n从0开始。

② arguments数组的个数,取决于实参列表,与形参无关。
但是,一旦第N个位置的形参、实参、arguments都存在时,形参将于arguments绑定,同步变化。
(即在函数中修改形参的值,arguments也会改变。反之,亦成立。)
③ arguments.callee 是arguments的重要标志。表示arguments所在函数的引用地址;
在函数里面,可以使用arguments.callee()调用函数本身。

递归
在函数内部,调用函数自身的写法,叫做递归。
递归分为两部分: 递 和 归。 以递归调用语句为界限,可以将函数分为上下两部分。
递:当函数执行上半部,遇到自身的语句时,继续进入内层函数,在执行上半部分。直到执行哇按最内层函数。
归:当内层函数执行以后面,在从最内层函数开始,逐渐执行函数的下半部分。

当最外层函数执行时,遇到自身调用语句,会进入内层函数执行,而外层函数的后半部分暂不执行。
直到内层函数执行完以后,在逐步向外执行。

【js代码的执行顺序问题】
js代码在运行时,会分为两大部分:检查装载和执行阶段
检查装载阶段:会先检测代码的语法错误,进行变量、函数的声明。
执行阶段:变量得瑟赋值、函数的调用等,都属于执行阶段。

以一下代码为例:
console.log(num);   Undefine
var num=10;

func1();    函数可以正常执行
function func1(){}

func2();    函数不能执行,打印func2,显示Undefine
var func2= function(){}


-----------检查装载阶段----------
var num;

var func1 = function(){};

var func2;

----------------------------------------

-----------代码执行阶段----------
console.log(num);
var num = 10;

func1 ();

func2 ();
func2 = function(){}

----------------------------------------

console.log(num);    Undefine
var num=10;

func1();    函数可以正常执行
function func1(){}

func2();    函数不能执行,打印func2,显示Undefine
var func2= function(){}

JS学习三(函数)的更多相关文章

  1. js学习之函数表达式及闭包

    来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(七) 直接切入主题~ 定义函数的方式有两种: 函数声明 function functio ...

  2. js学习之函数的参数传递

    我们都知道在 ECMAScript 中,数据类型分为原始类型(又称值类型/基本类型)和引用类型(又称对象类型):这里我将按照这两种类型分别对函数进行传参,看一下到底发生了什么. 参数的理解 首先,我们 ...

  3. js学习-自定义函数、对象的字面量、json对象学习小结

    一.自定义对象的构造: var student=new Object(); //object是顶级对象,使用构造函数的方法创建一个对象,此处的意思是创建了一个学生的空对象 student.name=& ...

  4. js学习之函数声明与函数表达式区别[原创]

    作为一名js初学者,与大家分享下.Javascript中有函数声明提升的功能,会优先编译函数声明部分.比如, ff(); function ff(){ alert("hello world. ...

  5. js学习之函数

    1/.js中函数就是对象. 2/以表达式方式定义的函数一般不要函数名以使代码紧凑. 3/js中函数声明的方式会被默认提到外部脚本或最前面,所以在其定义前的代码也可调用. 然而以表达式方式的则不行. 4 ...

  6. Oracle的基本学习(三)—函数

    一.字符函数   1.大小写控制函数 --lower:使字母变为小写-- --upper:使字母变为大写-- --initcap:使字符的第一个字母变为大写-- select lower('ABC') ...

  7. node.js学习三--------------------- http服务器模块的搭建

    /** * http服务器的搭建,相当于php中的Apache或者java中的tomcat服务器 */ // 导包 const http=require("http"); //创建 ...

  8. js学习笔记 -- 函数

    js函数有类似javaMethod用法 Math.max.apply( Math.max.call( Array map,reduce,filter,sort , , , , , , , , ]; v ...

  9. js学习:函数

    概述 函数的声明 JavaScript 有三种声明函数的方法 function 命令 function命令声明的代码区块,就是一个函数.function命令后面是函数名,函数名后面是一对圆括号,里面是 ...

随机推荐

  1. 4.写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能: 1)输出字符串的长度。 2)输出字符串中第一个出现字母a的位置。 3)在字符串的第3个字符后面插入子串“hello”,输出新字符串。 4)将字符串“hello”替换为“me”,输出新字符串。 5)以字符“m”为分隔符,将字符串分离,并输出分离后的字符串。 */

    namespace test4 {/* 4.写一个控制台应用程序,接收一个长度大于3的字符串,完成下列功能: 1)输出字符串的长度. 2)输出字符串中第一个出现字母a的位置. 3)在字符串的第3个字符 ...

  2. hdu--1316--How Many Fibs?(java大数)

    How Many Fibs? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  3. Mysql 基于日志点的主从复制(实操)

    实现环境: Master 主:192.168.100.165 (Mysql 5.6.36) Slave 从 :192.168.100.156 (Mysql 5.6.36) 步骤1.在主DB服务器上建立 ...

  4. Linux的nginx环境的vue 部署

    1.使用WebStrom编程好的vue 进入到Terminal运行npm run build           2.使用WinSCP进入到nginx 目录配置文件下面,找到nginx.conf文件: ...

  5. Loadrunner常见错误处理方法

    1.错误 -26601: 解压缩函数(wgzMemDecompressBuffer)失败,返回代码=-5 (Z_BUF_ERROR).inSize=0.inUse=0.outUse=0 用LR做压力测 ...

  6. 像VUE一样写微信小程序-深入研究wepy框架

    像VUE一样写微信小程序-深入研究wepy框架 微信小程序自发布到如今已经有半年多的时间了,凭借微信平台的强大影响力,越来越多企业加入小程序开发. 小程序于M页比相比,有以下优势: 1.小程序拥有更多 ...

  7. java‘小秘密’系列(一)---String、StringBuffer、StringBuilder

    java'小秘密'系列(一)---String.StringBuffer.StringBuilder 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现b ...

  8. Entity Framework : The model backing the '' context has changed since the database was created

    1.采用code first 做项目时,数据库已经生成,后期修改数据库表结构.再次运行时出现一下问题: Entity Framework : The model backing the '' cont ...

  9. unity 竖屏不能全屏显示

    最近遇到一个问题,硬件显示屏是1080*1920的竖屏,但是导出后打开exe进去并不能全屏 处理办法是1.确认配置都是正确的,简单来说,就是自适应设定,这个网上有很多,就不赘述了. 2.exe启动时需 ...

  10. windows转储文件(dmp)

    1. 何为转储文件      转储文件也就是我们常说的dump文件.可以把转储文件看成软件的某个时刻的一个快照.转储文件一般都是在软件出现问题时手动生成或者程序自动生成.下面我们介绍几种生成转储文件的 ...