js函数(续)

一、全局变量和局部变量
全局变量:当前js页面中均可使用的变量【声明在函数外面的变量】,整个js页面中均可以使用。
局部变量:声明在函数内部的变量,只能在函数内部使用。
eg:

    var a = 1;
    console.log(a);
    function test(){
        console.log(a);  //1
        var b = 2 //
        c = 3;  //c变量为全局变量,它的声明提前了【在页面的开始声明】
        console.log(b);  //2
    }
    console.log(b);  //错误提示:b is not defined

二、函数的使用
函数作为函数的参数使用:(可以作为回调函数使用)
eg:

    function test(fun){
        var msg = '我是test()函数中的变量msg';
        fun(msg);
    }
    //函数test的调用
    test(function(param){
        console.log(param);  //输出:我是test()函数中的变量msg
    });

函数作为返回结果来使用:
eg:

    function test(){
        return function(){
            console.log('我是test()函数的返回函数中的输出语句');
        };
    }
    //函数test的调用
    test();   //test();的返回值为:function(){console.log('我是test()函数的返回函数中的输出语句');}
    test()();  //输出:我是test()函数的返回函数中的输出语句


三、值传递与地址传递【简单叙述一下】
a.变量是通过值传递的。后面变量值改变不影响前面变量的值【相当于值的复制
b.对象是通过地址传递的。赋值时使用的是指向该对象的指针地址,获得该指针地址的变量改变
对象属性值,其他拥有相同指针地址的变量指向的堆空间属性值也相应更新改变,所以其前面对象相应的属性值会发生改变。

四、闭包

    //闭包  是函数访问上下文中的变量
    var arr = [];
    for(var i=0;i<5;i++){
    /*
        //这样的代码会有闭包现象
        arr[i] = function(){
            console.log(i);
        };
    */
    
        //解决闭包问题,使用立即执行函数来动态获得相应参数i的值
        arr[i] = (function(num){
                return function(){
                    console.log(num);
                };
        })(i);
    }
    console.log(arr);  //Array(5) [i(),i(),i(),i(),i()]
    arr[0](); //0
    arr[1](); //1
    arr[2](); //2

       

原文地址:https://www.cnblogs.com/nzcblogs/p/11177140.html