一 函数的介绍

  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. git使用mvn clean install 报错原因排查

    使用命令行git-bath.exe 来拉代码并进行编译之类的服务,结果在拉依赖时一直报错连的是144.131.254.26,看了maven的setting配置 文件 没并没有错, 最终定位问题是 gi ...

  2. Python11之列表2(获取、删除列表元素、列表分片、拷贝)

    一.获取列表元素值 列表名 [ 索引值 ] 注:索引值从0开始 nameList = ['詹姆斯','字母哥','乐福','威少','乔治','戴维斯'] nameList[0] '詹姆斯' name ...

  3. echo、print和print_r的区别

    1.echo 可以输出一个或多个字符串 ,多个以逗号隔开就行 2.print 也可以输出一个或多个字符串 ,多个要用连接符 3.print_r()可以打印数组:对象 bool print_r ( mi ...

  4. sass快速使用

    sass的使用 建议使用一种语法格式(scss) scss sass转换 sass-convert main.scss main.sass sass变量声明 example: $headline-ff ...

  5. Linux下 sftp服务配置

    查看openssh的版本,使用ssh -V 命令来查看openssh的版本,版本必须大于4.8p1,低于的这个版本需要升级. 参考博客:https://yq.aliyun.com/articles/6 ...

  6. JavaScript 基础(数据类型、函数、流程控制、对象)

    一.JavaScript概述 1.1 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名Script ...

  7. JAVA 插入注解处理器

    JDK1.5后,Java语言提供了对注解(Annotation)的支持 JDK1.6中提供一组插件式注解处理器的标准API,可以实现API自定义注解处理器,干涉编译器的行为. 在这里,注解处理器可以看 ...

  8. 总结一下几个for循环常见用法和区别

    1.for循环//有人喜欢使用一个临时变量把长度缓存起来,说是数据量大时效果更好(我本人没有去验证) for(j = 0,len=arr.length; j < len; j++) { //执行 ...

  9. Linux查找文件之Find命令

    Linux系统文件中常用属性包括以下内容:名称,大小,权限,属主,属组,修改时间,访问时间等.在庞大的Linux系统中查询文件,需要借助查找工具来实现,依此可以查询相同或指定属性的文件,本文所讲的查询 ...

  10. ORACLE获取年初年末,月初月末,季度初季度末

    转自:https://www.cnblogs.com/leqhome/p/5319984.html --年初,年末select trunc(sysdate,'yyyy') from dual;sele ...