JOE个人网站

JOE个人网站,不仅仅是一个网站,更像是一个展现自我的平台,致力于让朋友们都可以
有所感触,有所收获。

JS函数

2017-12-19 16:16:36
五、函数
 function test() {
  alert('我来自test');
 }
 test();

 1、JS中,自定义函数不能带默认值:
  function test(n=12) {
   alert(n);
  }
  test(); //这是错误的

  注释:在最新版的火狐浏览器中,是支持默认值的;

 2、给默认值的方法:
  function test(n) {
   if(typeof(n)=='undefined') {
    n=12;
   }
   alert(n);
  }
  test(); //输出12

 3、以下书写是正确的
  function test(n,m,k) {
   alert(n);
  }
  test(10);

 3、可变长度参数列表 (arguments封装了函数中实参部分的所有内容,可以用for in 方式遍历出来)
  function test() {
   for(n in arguments) {
    document.write(arguments[n]+'<br/>');
   }
  }
  test('a','b','c','d');

 补充:
  调试的时候,经常使用的方法:
   alert 弹框输出;
   document.write 输出到文档中;

 4、获取arguments的长度 (arguments.length)
  for(var i=0;i<arguments.length;i++) {
   document.write(arguments[i]);
  }

 5、函数的嵌套定义
  function myfun() {
   function mysum(x,y) {
    alert(222);
    return x+y;
   }
   alert(111);
   return mysum(1,2);
  }

  a、嵌套的子函数,只能出现在函数中,不能出现在ifelse这样的分支结构以及while这样的循环结构中;
  b、嵌套的子函数,只能在函数中调用,不能在外层调用;

  补充:不是重点,了解即可:
   var f=new Function('x','y','var z=x+y;return z;');
   alert(f(1,5)); //6

 6、变量函数
  function test() {
   alert(123);
  }
  //alert(test);
  var temp=test;
  alert(temp); //输出的效果和test一样
  temp(); //所以我们可以在这里加括号调用

 7、匿名函数
  var temp=function() {
   alert(123);
  }
   //alert(temp);
  temp();

 8、回调函数
  function test(x,func) {
   alert(x+func(10));
  }

  function demo(n) {
   return n*2;
  }
  test(1,demo); //21
  -----------------------
  function test(x,func) {
   alert(func(x));
  }

  function demo(n) {
   return n*2;
  }
  test(1,demo); //2
  -----------------------
  function test(x,func) {
   alert(func(x));
  }

  function er(n) {
   return n*2;
  }

  function san(n) {
   return n*3
  }

  test(1,san); //3
  ----------------------
  function test(x,func) {
   alert(func(x));
  }

  test(1,function(n) {
   return n*3;
  });    //3

六、变量的作用域
 核心:JS中全局的变量可以在局部中使用,但局部变量不可以在全局中使用

 全局变量
  1、在函数体外部通过var声明的变量是全局变量
  2、在函数体内部不通过var声明的变量也是全局变量
  3、在函数体外部没有通过var声明的变量也是全局变量

 局部变量
  1、在函数体内部通过var声明的变量是局部变量
  2、形参属于局部变量

 注意:如果在函数体里面声明了和全局变量同名的局部变量,则该函数体内部的同名的全局变量相当于不存在(undefined)

 实例:
  1、
   var n=5;
   function test() {
    var n=10;
    alert(n);
   }
   test();  //10
   alert(n); //5

  2、
   var n=5;
   function test() {
    n=10;
    alert(n);
   }
   test(); //10

  3、
   var n=10;
   function test() {
    alert(n);
    var n=5;
   }
   test(); //undefined
   alert(n); //10

  4、
   var n=10;
   function test() {
    var n=5;
    function demo() {
     return n;
    }
   }
   alert(test()); //5

  5、
   var n=10;
   function test() {
    var n=5;
    function demo() {
     return n;
    }
    return demo;
   }

   alert(test()()); //5