一 函数的介绍

  1.概念:由一堆代码按照一定的规则,组成实现了某个功能,通过函数自身或事件调用

   函数的特点:

    忽略细节:只关注其实现的功能,不关注内部构造;

    重复使用:函数可以实现代码的重复利用;

    选择使用:只有当函数执行时,函数中的代码才能运行,不执行即不运行。

    函数的定义的原则:函数封装时跟还需要有对外接口,用来与函数外部交互信息
 
  2.创建(定义,声明)函数:
       声明式:function关键字,声明函数的关键字,类似于var
    例如:function  fn( ) { }  (function声明关键字;fn函数名;( )对外的接口,参数;{ }壳,函数体,函数的执行语句)
 
    赋值式:声明一个变量,将函数赋值给变量;变量名即函数名
    例如 var fn;fn = function( ) { }
  3.函数的执行:

     自身执行:函数名(),任何情况下,只要函数名()了,函数立即执行(主动执行)
     行为(事件)调用:某元素绑定事件,事件触发即执行(被动执行)
      元素.事件 = 函数名------>box.onclick = fn;
         元素.事件 = 函数的内容------>box.onclick = function( ) { }
  4.函数的参数(形参与实参)
    实参:执行时的参数叫实参,实参被形参接收,是一个特定的值;
    形参:定义时的参数叫形参, 形参保存了实参, 形参是变量。
      (传参:是一种行为,函数执行时将实参传给形参)
function fn(a){
console.log(a);    //5
}
fn(5);

    参数的个数:可以传无限个。

    参数的类型:可以是任何数据类型。(当一个函数A作为参数,传到另一个函数B中,被执行,作为参数的这个函数A,叫回调函数)

    关系:实参和形参,数量一致,按照顺序一一对应(形参多,多出来的形参是undefined;实参多,多出来的实参,被传到arguments对象中)

function fn(b,a,c){
console.log(a); //world
console.log(b); //hello
console.log(c); //
console.log(argument);    //Argument{0:"hello",1:"world",2:123,3:456,4:789}
}
fn("hello","world",123,456,789) ;

    argument:是一个伪数组,有长度和索引;可以通过遍历拿到所有实参。

  5.函数的返回值  

    返回值:在函数执行结束后,得到的数据,返回到函数的执行语句上。

       (默认情况下,函数返回undefined,如果需要有返回值,要在函数中使用关键字:return)

    返回值作用:如果是处理数据的函数,处理之后的数据,有可能需要二次使用,需要有返回值,返回处理好的数据
    
二 函数的作用域
  1.概念:变量生效的区域
 
       2.区域:全局与局部
     全局:整个代码文件,不属于任何一个函数,就是全局(全局作用域下的变量,叫全局变量)
     局部:每个函数都是一个局部(局部作用域下的变量,叫局部变量)
 
  3.作用域访问的访问规则:
             (1)同级局部不能跨
             (2)父不能拿子,子能拿父
             (3)多个父子级作用域内都有,找最近的作用域
三 函数的应用
  1.变量的提升:使用var声明的变量,会提前到当前作用域的开始的位置,被声明。原位赋值。
 
  2.函数的提升:所有使用function声明的函数,都会整体提升,只要在当前作用域内声明了函数,在当前作用的任何位置都可以使用
        (注意:1.赋值式创建函数,提升的是声明,不是函数
            2.当函数和变量重名,变量的提升更高,函数的提升在变量的下面,导致,函数生效)
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"
}
fn();
// 以上代码等价于↓↓↓
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();

  3.函数的递归:在函数中执行自己(递归最重要的就是停止条件)

 //用递归求10的阶乘
function fn(n){
if(n == 1){
return 1
}else{
return n * fn(n - 1)
}
}
console.log(fn(10))
//利用递归求斐波那契数列(1,1,2,3,5,8,13,21,34,55,89...)
function fn(n){
if(n == 1 || n == 2){
return 1
}else{
return fn(n-1) + fn(n-2)
}
}
console.log(fn(5))

  4.构造函数

    构造函数:不是一种函数,就是一种执行函数创建数据的方式。

    关键字:new(用来执行函数)
//创建数值数据:
var n = new Number(123);
//创建字符型数据:
var s = new String("hello");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   
 

Javascript基础——函数的更多相关文章

  1. JavaScript基础函数---李老师的

    <!DOCTYPE html><html><head>    <title>demo2html</title>    <meta ch ...

  2. JavaScript基础函数的声明(014)

    1.函数的重要地位 函数(functions)在JavaScript里有着重要的地位,其原因有二: 它们是一种特殊的对象 它们提供作用域 说函数在JavaScript里是特殊的对象,因为: 程序的执行 ...

  3. Javascript基础 函数“重载”

    Javascript不像其他编程语言一样具有函数签名(什么是函数签名,简单的说就是说函数的接受参数类型和参数个数,也有人认为返回类型也应该包括.具体概念大家可以到网上查询). 所以Javascript ...

  4. JavaScript -基础- 函数与对象

    一.JavaScript三对象 1.分类方式一 1)ECMAScript JavaScript的ECMA规范 JS本身的对象 2)Dom 操作HTML相关 3)BOM游览器对象 游览器窗口对象,全局的 ...

  5. JavaScript基础函数和词法分析以及常用的内置对象和使用方法(4)

    day52 参考:https://www.cnblogs.com/liwenzhou/p/8004649.html 函数 函数定义 JavaScript中的函数和Python中的非常类似,只是定义方式 ...

  6. JavaScript基础函数的属性:记忆模式(019)

    函数在Javascript里是有属性的,因为它们是一种特殊对象.事实上,就算是没有明确声明,函数在最初就已经包含了一些固有的属性,比如所有函数都length这个属性,它可以指出函数声明了多少个参数: ...

  7. JavaScript -基础- 函数与对象(二)String

    一.判断数据类型typeof与判断对象类型instanceof 1.typeof typeof只能判断基础数据类型,无法判断引用数据类型 <script> var s="hell ...

  8. Javascript基础--函数(Function对象)

    1.函数是一段可执行的代码,函数可多次调用,模块化管理. 2.使用function语句,function funName([arg1][,arg2]....[,argn]){代码块}.所有版本可用,一 ...

  9. JavaScript基础函数的配置对象Configuration Objects(020)

    配置对象通常用在API库的实现中,当程序中需要编写要多次的模块,也可以采用这种模式.这种模式的好处是接口明确,扩展方便.比如,一个 addPerson在设计的最初需要两个参数作为初始化时人的姓名: f ...

随机推荐

  1. 使用RestTemplate进行服务调用的几种方式

    首先我们在名为MSG的服务中定义一个简单的方法 @RestController public class ServerController { @GetMapping("/msg" ...

  2. Hystrix【异常机制处理】

    在之前的老版本中,feign中是默认开启hystrix的,从新版本中默认已经关闭了,如果要通过FeignClient调用服务并开启hystrix的话,需要自定义开启,即:feign.hystrix.e ...

  3. Python10之列表1(创建列表和列表添加元素的方法)

    一.创建列表 列表名 = [’元素一‘,’元素二‘,’元素三‘,’元素四‘] 列表中的元素可以是任何类型,甚至可以是一个列表. list1 = ['詹姆斯','戴维斯','保罗乔治','字母哥',in ...

  4. Appscan 的安装与使用

    一.安装 1.右键安装文件,以管理员身份运行,如下图所示: 2.点击[确定] 3.点击[安装] 4.选择:我接受许可协议中单位全部条款,点击[下一步] 5.点击[安装]到该目录 6.如果需求扫描Web ...

  5. Python进阶:生成器--懒人版本的迭代器

    从容器.可迭代对象谈起 所有的容器都是可迭代的(iterable),迭代器提供了一个next方法.iter()返回一个迭代器,通过next()函数可以实现遍历. def is_iterable(par ...

  6. WUSTOJ 1304: 最大最小公倍数(Java)

    题目链接:

  7. 使用Python模块儿csv快速处理csv文件

    代码如下: import csv with open('test.csv',newline='') as f:     reader = csv.reader(f)     for row in re ...

  8. 在论坛中出现的比较难的sql问题:22(触发器专题3)

    原文:在论坛中出现的比较难的sql问题:22(触发器专题3) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有必要记录下 ...

  9. [ICCV 2019] Weakly Supervised Object Detection With Segmentation Collaboration

    新在ICCV上发的弱监督物体检测文章,偷偷高兴一下,贴出我的poster,最近有点忙,话不多说,欢迎交流- https://arxiv.org/pdf/1904.00551.pdf http://op ...

  10. Nginx作为缓存服务

    缓存类型 (1) 服务器缓存 服务端缓存一般使用Memcache.Redis (2)代理缓存 (3)客户端缓存 代理缓存流程图 第一步:客户端第一次向Nginx请求数据a: 第二步:当Nginx发现缓 ...