关于函数的概念知识以及一些案例的总结

关于函数的基础知识以及一些案例的总结

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Document</title>

</head>

<body>

</body>

<script>

//函数

// 概念:由一堆代码组成,实现一些特定的功能,通过函数自身和一些事件实现

//函数的创建

// 1,声明式

// function fn(){}

// function:声明函数的关键字

// fn:函数名

// ():存放函数的形参

// {}函数体,函数的执行语句

// fn() 函数的执行


// 难点:回调函数

// function fn(a){

// console.log(a);

// a(function(c){

// console.log("hello")

// c();

// })

// }

// fn(function(b){

// console.log(b);

// b(function(){

// console.log("脑袋疼")

// })

// })

// fn()将function(b){console.log(b)}作为实参传给了函数fn 此时(a)接受到的相当于a=function.log(b){console.log(b)}

// 这就相当于一个新的函数a;此时执行a()相当于执行函数a,如果实参a()里面还是一个新的函数,那个就相当于创建了一个新的函数b,就是b=function(c){console.log("hello")}

// 这样子执行b()执行了函数b 得到了hello的值


// 函数的实参与形参的关系

// 1,实参与形参之间一一对应

// 2,当实参多余形参时,实参存放在arguments中

// 3,当形参多余实参时,多余的形参为underfind,因为这些形参声明了但未经过实参的赋值


// arguments的用法:

// 定义:arguments是函数中的一个数组,专门用来存放函数中的实参,只有在函数中才能获取

// demo:

// 1.任意个数字的和

// function fn(){

// var sum=0;

// for(var i=0;i<arguments.length;i++){ //注意:这里的i代表的不是数组,而是由arguments 数组的序列号 由0 开始到arguments.length-1;

// sum+=arguments[i]

// }

// console.log(sum);

// }

// fn(3,2,34,36,242);


// demo:

// 1.让三个不同大小的数字,按照由大到小的顺序依次打印出

// function fn(a,b,c){

// if(a>b&&a>c){

// if(b>c){

// console.log(a,b,c);

// }else{

// console.log(a,c,b);

// }

// }else if(b>a&&b>c){

// if(a>c){

// console.log(b,a,c);

// }else{

// console.log(b,c,a);

// }

// }else if(c>a&&c>b){

// if(a>b){

// console.log(c,a,b);

// }else{

// console.log(c,b,a);

// }

// }

// }

// fn(7,4,6)


// 作用域:变量生效的区域

// 作用域的分类:

// 全局:整个代码的区域

// 局部:一个函数就是一个局部

// 全局作用域下的变量叫做全局变量

// 局部作用域下的变量叫做局部变量

// 函数的形参也是一个变量,函数是一个局部作用域,所以形参是一个局部变量


// 变量的生命周期:

// 全局变量:一直存在,随时可以被取用

// 局部变量:随着函数的运行开始而开始,函数的结束而结束


// 提升:

// 1,变量的提升;使用var声明的变量,会提升到当前作用域开始的位置,被声明,在原位赋值

// 2,函数的提升:只要使用function声明的函数,都会整体提升,在当前作用域内都可以被使用

// 但是使用赋值式创建的函数,提升的是声明,而不是函数


// 当函数名与变量同名时,变量会在函数上面的位置,导致函数生效;

function fn(){

console.log(a); //f2

var a = "hello";

console.log(a); //"hello"

function a(){1}

console.log(a); //"hello"

a = "world";

console.log(a); //"world"

function a(){2}

console.log(a); //"world"

}

// 以上的式子相当于

// function fn(){

// var a;

// function a(){1}

// function a(){2}

// console.log(a); //f2

// a = "hello";

// console.log(a); //"hello"

// console.log(a); //"hello"

// a = "world";

// console.log(a); //"world"

// console.log(a); //"world"

// }

// fn();


// 重点!!函数的递归:

// 递归实质上就是一个死循环,重要的是他的停止条件,这时就需要return来帮助函数终止运行

// demo:

// 1.计算5的阶乘

// function fn(n){

// if(n==1){

// return 1;

// }else{

// return n*fn(n-1);

// }

// }

// console.log(fn(3));


// 2.用递归计算1,1,2,3,5,8,13....

// function fn(n){

// if(n==1||n==2){

// return 1;

// }else{

// return fn(n-2)+fn(n-1);

// }

// }

// console.log(fn(3));

// 3.求一个数的最大公约数

// function fn(m,n){

// var r=m%n;

// m=n;

// n=r;

// if(r==0){

// return m;

// }else{

// return fn(m,n);

// }

// }

// console.log(fn(24,6));


// 递归的总结,递归是一个递和归的过程,在归的过程中,判断递的条件,不成立的话将fn(m,n)再进入到函数中

// 执行一次;

// 递归实质上就是一个死循环

// 递归的样式如下

// function fn(){

// fn();

// }

// fn();

// 所以说,让递归停止的条件很重要


// 构造函数:

// 构造函数是一种函数的存储方式


// 数据的存储方式:

// 1,字面量 var a=123;

// 2,构造函数,var b=new Number(123);


// 重点 对象:对象是对事物的描述

// 对象的作用是存储数据

// 对象的实质就是键值对(属性:属性值)

// 键值对之间用,隔开

// 对象中的属性叫做属性

// 对象中的函数叫做方法名

// 语法:对象.属性(方法名)

</script>

</html>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,740评论 0 38
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 6,154评论 0 2
  • 通常来说,一个函数就是一个可以被外部代码调用(或函数本身递归调用)的“子程序”。和程序本身一样,一个函数的函数体是...
    betterwlf阅读 3,375评论 0 0
  • 1.函数声明和函数表达式有什么区别 (*) 区别: 函数声明后面的分号可加可不加,不加也不影响接下来语句的执行,但...
    Sheldon_Yee阅读 3,081评论 0 1
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 6,365评论 1 10