zoukankan      html  css  js  c++  java
  • js学习——函数

    函数声明

    function funName(parameter){}

    函数表达式,并把函数存储在变量x中

    //不用给函数名,后续并不能直接用给定的函数名调用
    var x = function(a){return a};
    x;//返回的是一个函数对象
    x();//调用函数

    用函数构造函数定义一个函数(参数, 表达式)

    var myFunc = new Function("a", "b", "return a + b");

    函数提升:声明会自动提前,赋值的不提升

    myFunc(10);
    function myFunc(x){return x;}

    函数自动调用自己执行

    (function callSelf(){alert("i call myself");})();

    函数是对象

    function myFunc(){};typeof myFunc;//类型为 function

    显式参数:形参(类似C++)      隐式参数:实参(类似C++)

    参数规则:对隐式参数不进行类型检测,也不进行个数检测

    默认参数:如果没有给隐式参数,那么显式参数的值为undefined

    function myFunc(x)
    {
        x = x||0;//若x是undefined,则将其值设为0
    }

    arguments对象:function的内置属性

    function myFunc()
    {
        var n = arguments.length;//参数的个数
        //遍历输出每一个参数
        for(var i = 0; i < n; i++)
        {
             alert(arguments[i]);
        }
    }

    参数传递:按值传递(C++)

    //不是对象的是按值传递
    var a = 0;
    function ma(a){a = 4;}
    ma(a);//结果没有变化
    //隐式参数是按值传递
    var c = [1,2,3];
    function mc(){arguments[0] = 3;}
    mc(c);//c的值没有变化

    参数传递:按引用传递(C++)这个概念有点问题,还要再研究一下

    var b = [1,2,3];
    //显示参数,且参数是一个对象
    function mb(b){b[0]=3;};
    mb(b);//b的值发生变化

    函数调用,有4种调用方式,区别在于this的初始化

    this指向调用函数的对象

    //作为一个函数调用
    function myFunc()
    {
        return this;
    }
    //返回window对象,因为默认属于window全局对象
    myFunc();
    //作为对象的方法调用
    var myObj={
        myFunc:function(){return this;}
    };
    myObj.myFunc();//返回myObj对象:Object {myFun: function}
    //用构造函数调用函数,构造函数中的this没有任何值
    function myFunction(){return this;}
    //this指向实例化后的对象:myFunction{}
    var myFunc = new myFunction();
    //作为函数方法调用函数
    function myFunction(a,b,c){return this;}
    //第一个参数myObj会成为this
    var a = 0, b = 0, c = 0;
    myObj = myFunction.call(myObj, a, b, c);//按参数一个个对应给出
    var arr = [0, 0, 0];
    myObj = myFunction.apply(myObj, arr);//参数组合成一个数组

    js闭包(python中也类似)

    可访问上一层函数作用域里变量的函数

    var add = (function() {
        var counter = 0;
        return function() { return counter += 1; };
    })();//自调用函数
    add();
    add();//计数器会递增
    var x = function(){return function(){alert("abc");};};
    x; //function(){return function(){alert("abc");};};
    x(); //function (){alert("abc");}
    x()();//会执行alert("abc")
  • 相关阅读:
    关于课内外读物的建议
    c# Aes加解密
    web api 如何通过接收文件流的方式,接收客户端及前端上传的文件
    c# 文件夹权限
    mysql 8创建远程访问用户以及连接mysql速度慢的解决方法
    为什么读书?读书让我们明心见性!
    大部分教程不会告诉你的 12 个 JS 技巧
    nuget包管理nuget服务器发布包时出现请求报错 406 (Not Acceptable)
    Python 实现毫秒级淘宝、京东、天猫等秒杀抢购脚本
    eos的资源和工具列表
  • 原文地址:https://www.cnblogs.com/coolqiyu/p/7087917.html
Copyright © 2011-2022 走看看