一 函数的介绍

  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. Ubuntu 软件卸载脚本(卸载软件 + 移除配置文件 + 移除依赖项)

    #!/bin/bash function z-apt-uninstall() { if [ ! $1 ] then echo "z-apt-uninstall error: software ...

  2. 小程序--e.target和e.currentTarget区别

    事件捕获与事件冒泡 事件捕获是从外到内,事件冒泡是从内到外. 注意:不管是不是冒泡事件,都不会改变事件传递的参数值,都还是在dataset中获取(******) target:指事件源组件对象    ...

  3. Python2和3字符编码的区别

    Python2和3字符编码的区别 一.字符编码应用之Python 1.1 执行Python程序的三个阶段 Python test.py(我再强调一遍,执行test.py的第一步,一定是先将文件内容从硬 ...

  4. go io.Reader 接口

    io 包指定了 io.Reader 接口, 它表示从数据流结尾读取. Go 标准库包含了这个接口的许多实现, 包括文件.网络连接.压缩.加密等等. io.Reader 接口有一个 Read 方法: f ...

  5. linux学习之路(二)--centos7安装Redis(单点)

    一.安装redis 1.进入/usr/local/,新建services目录,进入该目录,下载redis wget http://download.redis.io/releases/redis-4. ...

  6. Java8新特性 - 方法引用与构造器引用

    方法引用 若Lambda体中的内容有方法已经实现了,我们可以使用"方法应用",可以理解为方法引用是Lambda表达式的另外一种表现形式. 使用操作符"::"将方 ...

  7. 【SoloPi】SoloPi使用2-功能使用,录制回放

    Soloπ是什么Soloπ是一个无线化.非侵入式的Android自动化工具,公测版拥有录制回放.性能测试.一机多控三项主要功能,能为测试开发人员节省宝贵时间. 录制回放功能在Soloπ的录制模式对应用 ...

  8. C#-System.Dynamic.ExpandoObject

    dynamic dynamicObject = new System.Dynamic.ExpandoObject(); dynamicObject.Id = Guid.NewGuid(); (dyna ...

  9. WSL 服务自动启动

    WSL 服务自动启动 参考 https://zhuanlan.zhihu.com/p/47733615 Windows 启用 WSL 功能支持 > Enable-WindowsOptionalF ...

  10. alt和title的区别

    alt是html标签的属性,而title既是html标签,又是html属性. 在图像标签img中,除了常用的宽度width和高度height属性之外,还有两个比较重要并且也会用到的属性,就是alt和t ...