zoukankan      html  css  js  c++  java
  • javascript基础-js函数

    一、创建函数的方式

    1)普通方式

    function cal( num1, num2 ) {
        return num1+num2;   
    }

    2)使用变量初始化方式

    var plus = function(num1, num2) {
        console.log(num1 + num2);
    }
    // 调用 
    plus(15,20);

    3)使用构造函数

    //这种方式不推荐使用,这种语法会导致解析两次代码
    var box = new Function("num1", "num2", "return num1+num2");
    console.log(box(1,3));
    console.log(typeof box);    //输出:function 表示function类型的字符串 

    4)作为函数的返回值传递

    function fun(num){
        return num+10;
    }
    function fun1(fun, num){
        return fun + num;
    }
    var result = fun1(fun(10), 10);    //fun2(10)这里传递的是函数的返回值,和普通的变量一样
    console.log(result);

    5)将函数本身进行传递

    function fun2(fun, num){
        return fun(num);
    }
    var result = fun2(fun, 10);
    console.log(result)//打印result变量,即函数
    console.log(result( ))//调用函数并打印return的结果
    
    
    
    
    

    二、匿名函数

    1)普通函数

    function box( ) {
         console.log("1");
    }

    2)匿名函数

    单独的匿名函数是不能运行的,就算能运行,也无法调用

    function( ) { 
         return "Lee";
    }

    3)把匿名函数赋值给变量

    var box = function( ) {
        return "box:匿名函数";   
    }

    4)自调用匿名函数

    (function(){
        console.log("1");
    })( );

    (function( ) {
        console.log("2");
    }( ));

    5)自调用匿名函数赋值给变量

    //如果没有后面的(),将打印出函数
    var test = (function( ) {
        return "test:匿名函数";   
    }) ( );               
    console.log(test);
    
    console.log((function( ) {return "自我执行后用的打印"})( ));

    6)匿名函数的传参

    (function(age){
        console.log(age);     //25
    })(25);

    7)函数里的匿名函数

    function box2( ) {
        return function( ) {        //(闭包-函数里面的函数)
            return "函数里的匿名函数";   
        }
    }
    console.log(box2( )( ));

    var b=box2( );
    console.log(b( ));

    三、闭包

    概念:闭包就是能够读取其他函数内部变量的函数
    用途:1.可以读取函数内部的变量;2.让这些变量的值始终保持在内存中
    优点:可以把局部变量驻留在内存中,避免使用全局变量(使用全局变量的缺点:污染较大)
    缺点:由于闭包里作用域返回的局部变量资源不会被立即销毁回收,所以可能会占用更多的内存。过度使用闭包会导致性能下降。在IE中可能导致内存泄露。解决方法 是,在退出函数之前,将不使用的局部变量全部删除。

    1)通过闭包返回局部变量

    function box( ) {;
        var age = 32;
        return function( ) {
            return age;
        };
    }
    console.log(box( )( ));

    例1:使用全局变量来进行累加

    var num = 100;
    function test(){
        num++;   
    }
    console.log(num);    //执行第一次:101
    test();
    console.log(num);    //执行第二次,102

    例2:使用局部变量进行累加(只能执行一次)

    function test2(){
        var i = 100;
        i++;
        return i;
    }
    console.log(test2());    //执行第一次,101
    console.log(test2());    //执行第二次,101

    2)使用匿名函数实现局部变量驻留内存中,从而累加

    function test3(){
        var a=100;
        return function(){
            a++;
            return a;
        };
    }
    //错误调用方法:
    console.log(test3( )( ));     //执行第一次,101
    console.log(test3( )( ));     //执行第二次,101
    //正确调用方法:
    var t = test3();
    console.log(t( ));        //执行第一次,101
    console.log(t( ));        //执行第二次,102
    t = null;                    //解除引用,等待垃圾回收(销毁)
    console.log(t());         //将抛出异常

    闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便

  • 相关阅读:
    老旧ObjectARX SDK下载地址
    AutoCAD Civil 3D .NET 二次开发 勘误
    lisp网站
    Autodesk论坛中看到的一段代码,留存备用
    revit图纸导出dxf文件批量修改
    查询给定区域内曲面平均高程
    angular 输入型指令directive
    get set方法
    android 环境配置
    使用nginx启动angular项目
  • 原文地址:https://www.cnblogs.com/caoxb/p/9534887.html
Copyright © 2011-2022 走看看