zoukankan      html  css  js  c++  java
  • js函数

    1.arguments对象

     1 在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。
     2 function sayHi() {
     3         console.log(arguments)
     4         if (arguments[0] == "bye") {
     5         return;
     6     }
     7    alert(arguments[0]);
     8 }
     9 sayHi('bye','hi');
    10 arguments[0]对应的第一个参数,依次类推arguments[1]对应的第二个参数'hi'11 还可以用 arguments 对象检测函数的参数个数,引用属性rguments.length 即可。

    2.Function 对象

     1 function doAdd(iNum) {
     2     alert(iNum + 20);
     3 }
     4 function doAdd(iNum) {
     5   alert(iNum + 10);
     6 }
     7 doAdd(10);    //输出 "20
     8 doAdd 的值被改成了指向不同对象的指针。函数名只是指向函数对象的引用值,行为就像其他对象一样。
     9 var doAdd = new Function("iNum", "alert(iNum + 10)");
    10 var alsodoAdd = doAdd;
    11 doAdd(10);    //输出 "20"
    12 alsodoAdd(10);    //输出 "20"
    13 两个变量指向同一个函数,变量 doAdd 被定义为函数,然后 alsodoAdd 被声明为指向同一个函数的指针。用这两个变量都可以执行该函数的代码,并输出相同的结果 - "20"。

    3.闭包

     1 function count() {
     2     var arr = [];
     3     var i = 1;
     4     for (i; i <= 3; i++) {
     5         arr.push(function () {
     6             return i * i;
     7         });
     8     }
     9     console.log(i) //4
    10     return arr;
    11 }
    12 var results = count();
    13 var f1 = results[0];
    14 var f2 = results[1];
    15 var f3 = results[2];
    16 console.log(f1()) //16
    17 console.log(f2()) //16
    18 console.log(f3()) //16
    19 返回的函数在其定义内部引用了局部变量arr,所以,当一个函数返回了一个函数后,其内部的局部变量还被新函数引用。返回的函数并没有立刻执行,而是直到调用了f()才执行。在上面的例子中,每次循环,都创建了一个新的函数,然后,把创建的3个函数都添加到一个Array中返回了。你可能认为调用f1(),f2()和f3()结果应该是1,4,9,但实际结果是:全部都是16!原因就在于返回的函数引用了变量i,但它并非立刻执行。等到3个函数都返回时,它们所引用的变量i已经变成了4,因此最终结果为16。
    20 返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
    21 如果一定要引用循环变量怎么办?方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变:
    22 function count() {
    23     var arr = [];
    24     var i = 1;
    25     for (i; i<=3; i++) {
    26         arr.push((function (n) {
    27             return function () {
    28                 return n * n;
    29             }
    30         })(i)); //立即执行函数,也就是直接得出结果
    31     }
    32     console.log(i) //4
    33     return arr;
    34 }
    35 var results = count();
    36 var f1 = results[0];
    37 var f2 = results[1];
    38 var f3 = results[2];
    39 console.log(f1()) //1
    40 console.log(f2()) //4
    41 console.log(f3()) //9
     1 闭包实现计数器:
     2 function create_counter(initial) {
     3     var x = initial || 0;
     4     return {
     5         inc: function () {
     6             x += 1;
     7             return x;
     8         }
     9     }
    10 }
    11 var c1 = create_counter();
    12 c1.inc(); // 1
    13 c1.inc(); // 2
    14 c1.inc(); // 3
  • 相关阅读:
    C语言的标准输入输出
    Java 循环中标签的作用
    Java并发包中CountDownLatch的工作原理、使用示例
    Java并发包中CyclicBarrier的工作原理、使用示例
    Java并发包中Semaphore的工作原理、源码分析及使用示例
    ScheduleThreadPoolExecutor的工作原理与使用示例
    Java 循环中标签的作用
    线程池ThreadPoolExecutor、Executors参数详解与源代码分析
    线程池的工作原理及使用示例
    Callable、Future、RunnableFuture、FutureTask的原理及应用
  • 原文地址:https://www.cnblogs.com/qxp140605/p/11586097.html
Copyright © 2011-2022 走看看