美文网首页
JavaScript:函数学习

JavaScript:函数学习

作者: 勇往直前888 | 来源:发表于2017-03-20 17:24 被阅读16次

函数声明

  • function关键字,函数名称,函数定义
  • 可以先使用,再定义,有提升功能
  • 没有重载,定义相同函数名、不同参数签名的函数,后面的函数会覆盖前面的函数。调用时,只会调用后面的函数。
  • 这是最传统的使用方式,推荐使用
  • 函数定义的{}后面不要有;这仅仅是定义,不是执行;执行语句的()后面可以有;=== 区分定义和使用
console.log(square(5));
/* ... */
function square(n) {
    return n*n;
} // 这里不要有;只是定义,不是执行

函数表达式

  • 函数可以用表达式的方法赋值给一个变量
  • 可以省略函数名,以后用变量名调用
  • 表达式{}后面要有;
  • 需要先定义再使用,没有提升功能
var square = function(number) {
  return number * number
};  // 这里有;
var x = square(4); // x得到的值为16
  • 也可以提供函数名,并且可以用于在函数内部代指其本身,或者在调试器堆栈跟踪中识别该函数,可以用在递归调用中,比较方便
var factorial = function fac(n) {return n<2 ? 1 : n*fac(n-1)};
console.log(factorial(9));
  • 函数变量可以作为其他函数的参数,这种方式推荐使用,比如模拟map的实现:
function map(f,a) {
  var result = [];// 创建一个新的数组

  for (var i = 0; i != a.length; i++) {
      result[i] = f(a[i]);
  }
  return result;
}
var f = function(x) {
    return x * x * x
};
var a = [0, 1, 2, 5, 10];
var b = map(f, a);   // b = [0, 1, 8, 125, 1000]; a = [0, 1, 2, 5, 10];

自调用函数

  • 没有函数名
  • 也不赋值给一个变量
  • 定义用()包起来,后面紧跟着(),定义后马山执行
  • 用在只执行一次的场景。
(function () {
    var x = "Hello!!";      // 我将调用自己
    alert(x);
})();

闭包

  • 假设,函数A内部声明了个函数B,函数B引用了函数B之外的变量,并且函数A的返回值为函数B的引用。那么函数B就是闭包函数。
  • 通常用在对的gettersetter函数
var createPet = function(name) {
  var sex;
  
  return {
    setName: function(newName) {
      name = newName;
    },
    
    getName: function() {
      return name;
    },
    
    getSex: function() {
      return sex;
    },
    
    setSex: function(newSex) {
      if(typeof newSex == "string" 
        && (newSex.toLowerCase() == "male" || newSex.toLowerCase() == "female")) {
        sex = newSex;
      }
    }
  }
}

var pet = createPet("Vivie");
pet.getName();                  // Vivie

pet.setName("Oliver");
pet.setSex("male");
pet.getSex();                   // male
pet.getName();                  // Oliver

使用arguments对象

函数的实际参数会被保存在一个类似数组的arguments对象中。在函数内,可以通过arguments[i]找出传入的参数。比如,模仿数组的join函数实现:

function myConcat(separator) {
   var result = ""; // initialize list
   // iterate through arguments
   for (var i = 1; i < arguments.length; i++) {  // 0 是separator
      result += arguments[i] + separator;
   }
   return result;
}
// returns "red, orange, blue, "
myConcat(", ", "red", "orange", "blue");
// returns "elephant; giraffe; lion; cheetah; "
myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
// returns "sage. basil. oregano. pepper. parsley. "
myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");

参考文章

函数

JavaScript function函数种类

JavaScript 函数定义

相关文章

网友评论

      本文标题:JavaScript:函数学习

      本文链接:https://www.haomeiwen.com/subject/rzgbnttx.html