JavaScript标准教程

来源:互联网 发布:成立子公司的好处知乎 编辑:程序博客网 时间:2024/06/11 23:33
 //1.参数的省略
     function f(a, b) {            return a;        }        f(1, 2); //1        f(1); //1        f(); //undefined
//2.默认值
   //正确写法:
   function f2(a) {
            //上面代码的||表示“或运算”,即如果a有值,则返回a,否则返回事先设定的默认值(上              例为1);这种写法会对a进行一次布尔运算,只有为true时,才会返回a。可是,除了undefined以外,0、空字符、null等的布尔值也是false。也就是说,在上面的函数中,不能让a等于0或空字符串,否则在明明有参数的情况下,也会返回默认值。
            a = a || 1;
            return a;
        }
        f(''); //1
        f(); //1

        //精确写法:
    
    function f(a) {            (a !== undefined && a !== null) ? a = a : a = 1;            return a;        }        f() // 1        f('') // ""        f(0) // 0
        //3.传递方式
        //变量p是一个原始类型的值,传入函数f的方式是传值传递。因此,在函数内部,p的值是原始值的拷贝,无论怎么修改,都不会影响到原始值。
        var p = 2;
        function f(p) {
            p = 3;
        }
        f(p); //这里p的值是2

        //函数参数是复合类型的值(数组、对象、其他函数),传递方式是传址传递(pass by reference)。也就是说,传入函数的原始值的地址,因此在函数内部修改参数,将会影响到原始值。
        var obj = { p: 1 };
        function f(o) {
            o.p = 2;
        }
        f(obj); //这里obj.p等于2

     //4.arguments        function f() {            return arguments.length;        }        f(1, 2, 3)//3        f(1); //1        f(); //0

        // 要让arguments对象使用数组方法,真正的解决方法是将arguments转为真正的数组(2种方法)
        var args = Array.prototype.slice.call(arguments);
        // or

  var args = [];        for (var i = 0; i < arguments.length; i++) {            args.push(arguments[i]);        }

        //5.闭包
        //链式作用域(http://javascript.ruanyifeng.com/grammar/function.html)
        //既然f2可以读取f1的局部变量,那么只要把f2作为返回值,我们可以在f1外部读取它的内部变量
     
   function f2() {            var n = 999;            function fn() {                console.log(n);            }            return fn;        }        var result = f2();        result();//999

=========================

setInterval(function(){},2000);自动回调dequene方法

 var $html = document.getElementById("d2");    function cb1()    { console.log(1); }    function cb2()    { console.log(2); }    var p = $('p')[0];    $.queue(p, 'mx', cb1);    $.queue(p, 'mx', cb2);    //// 每2秒调用一次$.dequeue,依次输出1,2    setInterval(function () {        $.dequeue(p, 'mx');    }, 2000);


原创粉丝点击