函数

javascript中的函数指的是一个特定代码块,可能包含多条语句,以通过名字来供其它语句调用以执行函数包含的代码语句。
1.声明函数
(1)构造函数(通过new创建一个函数对象)

   var Person=new Function(console.log("jam"));
   Person();//jam;

注:此方法不推荐使用。
(2)声明函数(通过function关键字声明函数)

  function Person(name) {
   console.log(name);
  }
  Person('jam');//jam

(3)函数表达式:

  var Person=function() {
    console.log('jam')
  };
 Person();//jam

无论通过何种方式创建函数,js中的每个函数都是一个名为Function的全局对象的实例,因此js中的每个函数都可以被视为对象。
2.函数中的arguments.
arguments是一个对象。arguments对象是所有函数的一个局部属性,本质上是一个类似于数组的对象,里面包含了所有传递给函数的参数。

 function Person() {
  for(var i=0;i

3.函数的重载

  • 简单的说函数重载就是,当两个函数名相同时,后一个函数声明会把前一个函数声明给覆盖。
    function add() {
    console.log("被后面的函数覆盖")
    }
    function add() {
    console.log("覆盖前面的函数")
    }
    add()// 覆盖前面的函数。(执行第二个函数)
    4.声明提升
    和变量的声明前置一样,函数声明也会前置。即使函数执行写在前面也可以执行,因为函数声明即使在后面,也会前置。

    fn(); // "1"
    
     function fn(){
      console.log('1');
     }
      //这是一个简单的例子。次代码函数声明前置后为
    
     function fn() {
        console.log('1')
        }
      fn();//1
    

下面看一个复杂一点的例子:
sayName('world');
sayAge(10);
function sayName(name) {
console.log('hello',name);
}
var sayAge=function(age) {
console.log(age;)
};
根据函数声明前置,此代码等价于以下代码:
function sayName(name) {
console.log('hello',name);
}
var sayAge;
sayName('world');//hello world
sayAge(10);//报错,sayAge is not a function
sayAge=function(age){
console.log(age)
}
当使用函数表达式的方法声明函数时,函数前置的规则和变量前置的规则一样

下面看一个函数声明前置和变量声明前置混在一起的例子
   function fn(fn2) {
    console.log(fn2);
    var fn2=3;
    console.log(fn2)
    console.log(fn);
    function fn2() {
      console.log('fnnn2')
    }
  }
  fn(10);
根据函数声明前置和变量声明前置,上面的代码下面的代码等价
        function fn(fn2) {
            var fn2;
            function fn2() {
              console.log('fnnn2');
      }
          console.log(fn2);//function fn2() {console.log('fnnn2')},因为此时fn2是一个函数。
          fn2=3;
          console.log(fn2);//3,此时fn2=3,
          console.log(fn)//输出fn这个函数
    }
    fn(10);

你可能感兴趣的:(函数)