一 函数的介绍

  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. PAT甲级 链表题_C++题解

    链表处理 PAT (Advanced Level) Practice 链表题 目录 <算法笔记> 重点摘要:静态链表 1032 Sharing (25) 1052 Linked List ...

  2. Linux基础-06-vi编辑器

    1. vi编辑器简介 1) vi的定义:vi是一个UNIX和Linux系统内嵌的标准正文(文字)编辑器,它是一种交互类型的正文编辑器,它可以用来创建和修改正文文件. 2. vi编辑器的操作模式 vi编 ...

  3. python3快速安装升级pip3

    一.下载地址: 获取get-pip.py安装文件: 官网链接:https://bootstrap.pypa.io/get-pip.py 百度云链接:https://pan.baidu.com/s/14 ...

  4. Linux和Windows系统目录结构区别

    Windows目录结构图 Linux目录结构图 我们所有的操作尽量都要在/home/username目录下进行. 快捷进入家目录方式是cd ~.

  5. 深夜扒一扒Android的发展史

    说道,Android的发展史,我们就不得不先来了解一下手机的发展史 Android之前的时代 1831年英国的法拉第发现了电磁感应现象,麦克斯韦进一步用数学公式阐述了法拉第等人的研究成果,并把电磁感应 ...

  6. Scratch编程:绘制七色花(七)

    “ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 绘制一朵美丽的七色花. 02 — 设计思路 使用画笔功能 ...

  7. 封装函数(累计和、K型、金字塔)

    // 假设有个函数,只要传参数进去,就能统计累加的结果 function test($n){ if($n==1){ return 1; } return $n+test($n-1);}echo tes ...

  8. 应用程序池优化配置方案(IIS7、IIS7.5)

    定义: 是将一个或多个应用程序链接到一个或多个工作进程集合的配置,该池中的应用程序与其他应用程序被工作进程边界分隔, 一.一般优化方案 1.基本设置 [1]队列长度:默认1000,将原来的队列长度65 ...

  9. vue的交互

    交互     Vue做交互需要引入一个库:vue-resouce.js     get:      post     jsonp   <script src="vue.js" ...

  10. Fortify漏洞之Access Control: Database(数据越权)

    继续对Fortify的漏洞进行总结,本篇主要针对 Access Control: Database(数据越权)的漏洞进行总结,如下: 1.Access Control: Database(数据越权) ...