ECMAScript0二.JavaScript 面向对象精要–函数

  JavaScript中能对函数评释举办升级,那是因为引擎提前了然了函数的
  名字。而函数表达式仅能由此变量引用,因而不恐怕升级。

 

 

  4.2 改变this (call(),apply(),bind())
   有叁种函数方法允许你转移this的值。记住:函数也是目的
   所以函数也有主意。

var person = {
   name : 'Nicholas',
   sayNmae : function(){
    console.log(person.name);
   }
}

 壹.贰 函数表达式
  function早先前面不供给加上函数名,那种函数称为匿名函数,而是被
  2个变量引用。
  

 一.叁 函数注脚和表述分化
 

  function add(num1,num2){
       return num1 + num2;
  }

   4.2.3 bind()方法
    

    say.apply(this,['global']); //输出 "global:Micheel"
    say.apply(person1,['person1']);//输出 "person1 : Micholas"
    say.apply(person2,['person2']);//输出 "person12 : Greg"
var add = function(num1, num2){
       return num1 + num2;
  };

 

 

 四.对象方法
  假使多个指标的习性是函数,则该函数被称为方法。
  

   4.2.2 apply(this的值,[‘参数1′,’参数2’])方法
    

    function say(label){
         console.log(label + ":"+this.name);
    }
    var person1 = {
     name : 'Nicholas'
    };
    var person2 = {
     name : 'Greg'
    };
    var name = 'Micheel';
    say.call(this,'global'); //输出 "global:Micheel"
    say.call(person1,'person1');//输出 "person1 : Micholas"
    say.call(person2,'person2');//输出 "person12 : Greg"

 3.函数参数
  JavaScript函数的另一个新鲜之处在于你能够给函数字传送递
  任意数量的参数却不造成错误。那是因为函数参数实际上被保存在
  1个 类数组arguments的目的中。arguments的length属性会告知
  你日前有微微个值。Array.isArray(arguments)永远再次回到false。
  函数也是指标,所以也有总体性,lenght属性重返函数 期望参数
  个数。

 二.函数就是值
  函数是JavaScript的一大重点,你能够像对象壹样使用函数。
  也能够将它们赋给变量,在对象中加上它们,将它们当成参数传递给
  其他函数,或从别的函数中回到。基本上只要时方可利用此外引用值
  的地方,就足以行使函数。
  

 

 

function sayHi(msg){
    if(argrments.length === 0){
     msg = "default msg";
    }else{
     console.log(msg);
    }
}
   sayHi('hello');// 输出 "hello"

  3.2 重载
   JavaScript未有重载,但足以上行下效重载。
   利用传入的参数个数arguments.length来判断执行函数体。
   

  4.1 this对熊
   JavaScript 全部函数功效域内都有1个this对象表示调用
   该函数的指标。在全局成效域中this代表全局对象(window).
   当二个函数作为目的的点子被调用时,默许this的值等于那些
   对象。
   

    var say1 = say.bind(person1);
    say1("person1"); //输出 "person1 : Micholas"
    var say2 = say.bind(person2,"person2");
    say2(); // 输出 "person12 : Greg"

  3.1 arguments对象
  

   4.2.1 call(this的值,’参数1′,’参数2′)方法 
    

 1  function reflect(val){
 2     return val;
 3    }
 4    console.log(reflect("Hi!")); // "Hi!"
 5    console.log(reflect("Hi!",25)); // "Hi!"
 6    console.log(reflect.length); // "1"
 7 
 8    reflect = function(){
 9     return arguments[0];
10    }
11    console.log(reflect("Hi!")); // "Hi!"
12    console.log(reflect("Hi!",25)); // "Hi!"
13    console.log(reflect.length); // "0"
function say(){
    console.log(this.name);
}
   var person1 = {
    name : 'Nicholas',
    sayNmae : say
   }
   var person2 = {
    name : 'Greg',
    syaName : say
   }
   person1.sayName(); // "Nicholas"
   person2.sayName(); // "Greg"

在JavaScript中,函数其实也是目的。是函数分化于别的对象的性状是:
函数存在二个被称为[[Call]]的内部属性。[[Call]]性能是函数独有的,
标明该目的足以被实施。ECMAScript 定义了typeof操作符对全部[[Call]]
属性的目的回来 “function”。了然函数的一举一动是明白JavaScript的大旨。

 

    

 

 add(5,5);//返回10
  add2(10,10)//错误:add2 is not a function
  function add(num1,num2){
       return num1 + num2;
  }
  var add2 = function(num1,num2){
       return num1 + num2;
  };
  add2(5,5)//返回10;

 

 1 function sayHi(){
 2    console.log("Hi!");
 3   }
 4   sayHi();//输出 "Hi!"
 5   var sayHi2 = sayHi;
 6   sayHi2();//输出 "Hi!"
 7   //使用构造函数实现:
 8   var sayHi = new Function("console.log(\"Hi!\");");
 9   sayHi();// "Hi!"
10   var sayHi2 = sayHi;
11   sayHi2();// "Hi!"
12   //把函数当成参数传递
13   var numbers = [1,5,8,4,7,10,2,6];
14   numbers.sort(function(first,second){
15        return first - second;
16   })
17   console.log(numbers); //"[1,2,4,5,6,7,8,10]"
18   numbers.sort();
19   console.log(numbers);// "[1,10,2,3,4,5,7,8]"

 

1.函数表明式和表达式
 壹.1 函数证明
  以function开首前面跟着函数的名字