• js基础——function类型


    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
    没有人能一路单纯到底,但是要记住,别忘了最初的自己!
  • 相关阅读:
    web前端
    touch.js——手机端的操作手势
    js实现touch移动触屏滑动事件
    Javascript闭包(Closure)
    javascript的垃圾回收机制与内存管理
    浏览器渲染页面
    Web前端面试题目汇总
    gulp VS grunt
    [编写高质量代码:改善java程序的151个建议]建议88 用枚举实现工厂方法模式更简单
    [编写高质量代码:改善java程序的151个建议]建议86,87 default值,valueOf
  • 原文地址:https://www.cnblogs.com/LindaBlog/p/10974051.html
Copyright © 2020-2023  润新知