js函数

来源:互联网 发布:出货数据怎么做模板 编辑:程序博客网 时间:2024/05/17 07:25
函数
1.定义方式
    1)声明式:
    function text(x,y) {
            return x+y;
    }
    //声明式已定义,解析时优先执行

    2)表达式:
    var text = function (x,y) {
            return x+y;
    };
    //解析时先解析变量名,后执行赋值

    3)对象式:
    var text = new Function("x","y","return x+y");
    
    //调用方式:变量名();
2.立即调用的函数
    //匿名函数,只能应用一次,两种定义方式
    1)(function (x,y) {
            return x + y;
        })(1,2)

    2)(function (x,y) {
            return x + y;
        }(1,2))
3.作用域
     var a = 1;
        var b = 2;
        function fn(){
            var b = 3;
            console.log(b); //输出3
            fn1();
            function fn1() {
                console.log("inner"); //输出inner
            }
            console.log("inner "+b); //输出inner 3
        }
        console.log("outer "+b);  //输出2
        fn();
        //全局变量作用于整个script,而局部变量只能作用于定义该变量的函数体,二者同名时,局部变量在自己的势力范围内会覆盖全局变量。

4. 解析
     function fn(){
            console.log(1);
        }

        var fn = function(){
            console.log(2);
        } ;
        fn();
    //运行结果为2,一个声明式,一个表达式,二者重名时,声明式在由于已经定义,在解析时就开始执行函数体内部的语句,而表达式先解析变量名,后进行赋值,将覆盖声明式的输出结果。

5.作用域案例
      var a = 1;
        var fn = function() {
            console.log(a);
        };
        function fn1() {
            var a = 2;
            fn();
        }
        fn1();
    //运行结果为1,函数体内部的变量,在声明时就已经确定了它的作用域

6.传值参数
    var x = 1, y = 2;
        function fn(x,y) {
            x = 2;
            y = 3;
        }
        fn(x,y);
        console.log(x+""+y)
        //输出结果为12,针对原始数据类型,将其值传递

7.传址参数
        var arr = [1,2,3];
        function fn(arr) {
           arr[0] = 4;
           arr[1] = 5;
           arr[2] = 6;
        }
        fn(arr);
        console.log(arr)
    //运行结果为[4,5,6]

    var arr = [1,2,3];
        function fn(arr) {

            arr = [4,5,6];
        }
        fn(arr);
        console.log(arr)
    //运行结果为[1,2,3]
    //数组名保存为栈,且为第一个元素的地址,内部元素保存以堆的形式。针对引用类型,为址传递。
0 0