1、函数声明方式
1)普通声明方式
 function box(num1,num2){
      return num1 + num2;
 }
2)使用变量初始化函数
var box = function(num1,num2){
     return num1 + num2;
}
3)使用function构造函数
var box = new Function('num1','num2','return num1 + num2');不推荐
2、作为值的函数??:可像传递参数一样把一个函数传递给另一个函数,也可将一个函数作为另一个函数的结果范回。(回调函数)
function box(sumFunction,num){
 
  return sumFunction(num);    
 
}
function sum(sum){
  return num + 10;
}
var result = box(sum,10);//传递函数到另一个函数
理解:回调函数典型示例
eg. var  friends = ['Linda','Mike','Bob','Lucy'];
   
     friedns.forEach(function(name,index){//没有函数名的匿名函数
     console.log(index+1+'.'+name);//1.Linda ,2.Mike, 3.Bob,4.Lucy
 });
回调函数实现原理:
我们可以像使用变量一样使用函数,作为另一个函数的参数,在另一个函数中作为返回结果,在另一个函数中调用它。当我们作为参数传递一个回调函数给另一个函数时,我们只传递了这个函数的定义,并没有在参数中执行它。
当包含(调用)函数拥有了在参数中定义的回调函数后,它可以在任何时候调用(也就是回调)它。
这说明回调函数并不是立即执行,而是在包含函数的函数体内指定的位置“回调”它(形如其名)。所以,即使第一个jQuery的例子看起来是这样:
3、函数内部属性
1)函数内部的特殊对象:arguments
arguments是一个类数组对象,包含传入函数中的所有参数,主要用于保存函数参数;该对象有个属性callee,即指针,可指向拥有该对象的函数。
function arg(n1) {
          if (n1 <= 1) {
            return 1;
          } else {
            return n1 * arg(n1 - 1);//阶乘函数-递归算法(调用自身)
          }
        }
 console.log(arg(4));//n1=3,arg(3)=3*2=6;n1=6,arg(6)= 6*5*4*3*2=720
/*使用arguments.callee的原因:消除函数执行与函数名紧密耦合,
        * 即函数名改变后内部自身调用不用逐一修改
        * */
        function arg1(n2) {
          if (n2 <= 1) {
            return 1;
          } else {
            return n2 * arguments.callee(n2 - 1);//在严格模式下不能通过脚本访问会报错
          }
        }
        console.log(arg1(4));//控制台报错
2)函数内部的特殊对象:this
 this引用的是函数数据以执行操作的对象,或者说函数调用语句所处的那个作用域;当在全局作用域中调用函数时,this对象引用的就是window。
1.// 在全局变量中,this为window
    window.onload= function(){
        alert(window);//object window
    }
    this.onload= function(){
        alert(this);//object window
    }
2.//在函数中时,this为window对象
   function obj(pra){
        this.sear = pra;
    }
    obj("this为window对象");
    alert(sear);
3.//this在对象中,this就为该对象 
    var name = "对象";
    var person = {
        name: "user",
        xiu: function(){
            alert(this.name);//person内部的name
        }
    }
    person.xiu();//user
4.//this遇上new时,this为新创建的对象(obj)
  function Fun(){
        this.name = "新对象";
    }
    var obj = new Fun();
    alert(obj.name); //新对象
5. //this在内部函数中,this为window
   var name = "内部函数";
    var person = {
        name : "user",
        hello : function(){
            var sayhello = function() {
                alert(this.name);
            };
            sayhello();
        }
    }
person.hello();//内部函数
6.//this在内部函数中,若在对象中将this作为变量保存下来,this就指向该对象
var name = "修抗";
    var person = {
        name : "user",
        hello : function(){
            var th = this;
            var sayhello = function() {
                alert(th.name);
            };
            sayhello();
           }
    }
person.hello();//user

js基础——function类型的更多相关文章

  1. JS基础-变量类型和类型转换

    JS 变量类型 JS中有 6 种原始值,分别是: boolean number string undefined symbol null 引用类型: 对象 数组 函数 JS中使用typeof能得到哪些 ...

  2. Js函数function基础理解

    正文:我们知道,在js中,函数实际上是一个对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法.因此,函数名实际上是指向函数对象的指针,不与某个函数绑定.在常见的两种定 ...

  3. js基础知识--变量类型和变量计算

    提问: JS中使用typeof能得到的哪些类型 何时使用===何时使用== JS中有哪些内置函数 JS变量按照存储方式区分为哪些类型,并描述其特点 如何理解JSON 涉及知识点:(1)变量类型 值类型 ...

  4. 【js实例】Array类型的9个数组方法,Date类型的41个日期方法,Function类型

    前文提要:[js实例]js中的5种基本数据类型和9种操作符 Array类型的9个数组方法 Array中有9个数组方法: 1.检测数组 2.转换方法 3.栈方法 4.队列方法 5.冲排序方法6.操作方法 ...

  5. JS Function类型

    每个函数都是Function类型的实例,由于函数是对象,函数名实际上是一个指向函数对象的指针,不会与某个函数绑定. 1.函数的声明: (1)函数声明语法: function sum (num1,num ...

  6. javascript基础篇--function类型(上)

    在js中,function类型实际上是对象,每一个函数都是function类型的一个实例.并且与其它引用类型一样具有属性和方法. 声明 1普通方式 Function sum(num1,num2) { ...

  7. JS基础知识点——原始类型和对象类型的区别

    1.js类型 1.1 JavaScript语言规定了7种语言类型,他们分别是: Number(数字) Boolean(布尔值) String(字符串) Null (空) Undefined (未定义) ...

  8. 【笔记】js Function类型 内部方法callee

    运用function实现阶乘 以往的做法是如下的 function factorial(num){ if(num <= 1){ return 1; }else{ return num * fac ...

  9. Javascript 基础学习(三)js 的原始类型和声明变量

    java的基本数据类型一共有 byte short int long float double char boolean js中定义变量使用关键字 var js的原始类型(五个) String: 字符 ...

随机推荐

  1. Microsoft: Get started with Dynamic Data Masking in SQL Server 2016 and Azure SQL

    Dynamic Data Masking (DDM) is a new security feature in Microsoft SQL Server 2016 and Azure SQL DB. ...

  2. JDBC的事务处理 JDBC事务处理 JDBC教程

    JDBC的事务基本知识 事务的定义:一个事务是由一条或多条对数据库操作的sql语句所组成的一个不可分割的工作单元,只有当事务中的所有操作都正常执行后,整个事务才会提交给数据库. 结束事务的操作:com ...

  3. golang标准命令

    go build:编译(源码文件/代码包/依赖包) go install:编译并安装 go run:编译后并运行 go test go get:动态获取远程源码包 go generate go ver ...

  4. 在maven多模块结构中,并且使用overlay的情况下使用jetty热部署

    在使用maven多模块的结构的时候,同时有多个web工程使用maven-war-plugin的overlay来组织的时候,本地开发时如何在eclipse里面启动容器并且可以热部署调试是个比较麻烦的问题 ...

  5. 【记录Bug】 This is probably not a problem with npm. There is likely additional logging output above.

    一个eslint的错误 我的报错如下 $ npm install > node-sass@4.11.0 install C:\Users\Administrator\Desktop\forGit ...

  6. 【JZOJ4868】【NOIP2016提高A组集训第9场11.7】Simple

    题目描述 数据范围 解法 在暴力枚举的基础上,当n的系数在[0,m/gcd(n,m))时,得到的c是不重复不遗漏的. 设n的系数为x,m的系数为y. 不重复不遗漏性 设x=m/gcd(n,m)+i,那 ...

  7. NDK(1)简介

    AndroidNDK Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK”. Android程序运行在Dalv ...

  8. 高可用Kubernetes集群原理介绍

    ■ 文/ 天云软件 云平台开发工程师 张伟 1. 背景 Kubernetes作为容器应用的管理中心,对集群内部所有容器的生命周期进行管理,结合自身的健康检查及错误恢复机制,实现了集群内部应用层的高可用 ...

  9. hdu 1003 hdu 1231 最大连续子序列【dp】

    HDU1003 HDU1231 题意自明.可能是真的进步了点,记得刚开始研究这个问题时还想了好长时间,hdu 1231还手推了很长时间,今天重新写干净利落就AC了. #include<iostr ...

  10. mysql 查询当天、昨天、本周、上周、本月、上月、今年、去年数据

    mysql查询今天.昨天.7天.近30天.本月.上一月 数据 今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT ...