一 函数的介绍

  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. AVL排序二叉树树

    AVL树第一部分,(插入) AVL树是一种自平衡二叉搜索树(BST),其中对于所有节点,左右子树的高度差不能超过1. 一个AVL树的示例 上面的树是AVL树,因为每个节点的左子树和右子树的高度之间的差 ...

  2. jwt 无状态分布式授权

    基于JWT(Json Web Token)的授权方式 JWT 是JSON风格轻量级的授权和身份认证规范,可实现无状态.分布式的Web应用授权: 从客户端请求服务器获取token, 用该token 去访 ...

  3. Spring Cloud Alibaba学习笔记(15) - 整合Spring Cloud Gateway

    Spring Cloud Gateway 概述 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于Netty.Reactor以及WEbFlux构建,它 ...

  4. ASCII,UTF-8,Unicode字符串相互转换

    #include<string> #include<windows.h> #include<vector> using namespace std; //utf8 ...

  5. ajax实现文件上传,多文件上传,追加参数

    1.html部分实现代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  6. C# UTF-8文件带BOM和不带BOM文件的转换

    读取INI文件使用的是GetPrivateProfileString方法,自己读写ini文件没有问题. 调用C++的API对同一个ini文件进行处理后,发现首个Section的值读不出来:发现是API ...

  7. robot framework 怎么验证搜索无记录,页面元素不存在

    假设你要验证搜索无记录,页面元素不存在,假设我搜索的文本为你好 页面展示为如下 搜索:你好 假设页面搜索有结果: 你好  class=vtext 你好1  class=vtext 你好2  class ...

  8. idea 实用插件

    尊重劳动成果,本插件的整理原文出自:https://blog.csdn.net/weixin_41846320/article/details/82697818,感谢老铁的辛苦原创. 插件安装方式: ...

  9. Pandas-数据处理-基础部分

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/11014882.html  jupyter 代码 ...

  10. (转)使用SDWebImage和YYImage下载高分辨率图,导致内存暴增的解决办法

    http://blog.csdn.net/guojiezhi/article/details/52033796