• JS: function:函数


    函数创建:

    创建一个函数可以执行多次,一般情况下每次执行函数和上次执行没有任何关系

    function sun(){

    var total=null;

    total=1+1;

    return total;

    }

    函数创建后:

    1、首先开辟一个新的内存空间,浏览器为其分配一个16进制的地址,假设地址为 c2x231o

    2、把行数体中的js代码当作字符串存储岛内存空间中

    3、再把这个地址赋值给当前的函数名sum

    sum后面不加小括号,代表的就是当前函数本身

    sum();sum后面加小括号,代表的是执行当前函数

    sum():函数执行的目的:把函数之前存储的那些字符串变为js代码,然后再让js代码从上到下依次的执行

    1)函数执行的时候,首先会提供一个供函数体中代码执行的环境

     ——》私有作用域

    2)把函数体中的代码字符串变为代码从上到下执行

    闭包:函数执行的时候,首先会形成一个新的私有作用域,供函数体中的代码从上到下执行;

    形成的那个私有作用域,把我们函数体中的代码都包起来了,保护了里面的私有变量不受外界

    干扰(外面获取不到也修改不了)-->我们把函数执行的时候形成的这种保护机制叫做"闭包";

    函数的形参: 类似于函数的入口

    如果定义了形参,如果没有传递值,默认形参的值是undefined

    return: return就是当前函数提供给我们的出口,因为不提供出口的话,闭包的机制导致了在函数体的外面无法获取里面的返回值

    如果想在外面得到返回值,只需通过return把返回值返回给外面即可-->返回机制
    外面想用哪个值我们就把哪个值返回

    并不是把变量返回给外面,而是把变量存储的值返回给外面

    arguments:函数自带的(不管写没写形参,也不管是否传递值,arguments始终都是存在的),用来接受函数传递进来的参数值的一个集合

    for(var i = 0;i<argments.length;i++){

        var total = null;   

        var cur=arguments[i];

         !isNaN(cur) ? total+=cur : total;

    }

    实名函数:起了名字的函数就是实名函数

    匿名函数:没有起名字的函数就是匿名函数

    自执行函数:定义函数和函数执行一起完成了

    (fucntion(num){

    })(100);

    匿名函数

    (function(){
        var a="b";
        alert(a);
    })();

    函数表达式: oDiv.onclick=function(){

    }

     / 函数本身也有一些自己的属性
        /*
        *  length  形参个数
        *   name   函数名
        *   prototype 保存的是类的原型
        *   __proto__ 指向类的原型  也就是指针指向 prototype
        */

    // 函数的三面性
        // 1、普通函数方法  函数执行时候开辟栈内存作用域,形成闭包,进行预解释
        // 2、类            他可以创建自己的实例,也可以在prototype属性上保存自己的属性和方法
        // 3、普通对象       想object一样,拥有引用空间堆内存,也有__proto__找到自己所属类原型

    3. caller

    在一个函数调用另一个函数时,被调用函数会自动生成一个caller属性,指向调用它的函数对象。如果该函数当前未被调用,或并非被其他函数调用,则caller为null。

    function testCaller() {  
        var caller = testCaller.caller;  
        alert(caller);  
    }  
      
    function aCaller() {  
        testCaller();  
    }  
      
    aCaller();  

    4. callee

    当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。
    由于arguments在函数被调用时才有效,因此arguments.callee在函数未调用时是不存在的(即null.callee),且解引用它会产生异常。

     
    function aCallee(arg) {  
      alert(arguments.callee);  
    }  
      
    function aCaller(arg1, arg2) {aCallee();}  
      
    aCaller();  
  • 相关阅读:
    JUC并发工具包之Semaphore
    Linux命令
    uWSGI
    数据库 MySQL 练习
    c++
    c++ 初阶
    Git
    MySQl 和 Redis
    MySQL 查询
    MySQL 命令
  • 原文地址:https://www.cnblogs.com/zzzzzzzsy/p/6596457.html
Copyright © 2020-2023  润新知