首页 > 代码库 > JavaScript学习笔记【五】

JavaScript学习笔记【五】

JavaScript的引用类型-Function

  一、Function

    1.函数的声明和函数表达式、

    在JavaScript中、Function也是一种类型、所有定义的函数都是Function类型的、

     

     alert(sum(10, 1));

     function sum(val1, val2) {

      return val1 + val2;

     }

     上边的方法不会报错、因为JavaScript的执行环境会把函数的声明提前、而下边的函数表达式会报错、因为在执行alert的时候、sum还没有获得函数的引用、

     也就是JavaScript的执行环境只会把函数的声明提前、而不会将赋值提前

     alert(sum(10, 1));

     var sum = function(val1, val2) {

      return val1 + val2;

     };

     还有一种的函数的创建方式、在这里并不建议使用这种方式、由于这种方式需要一次解析和一次运行因此也会降低JavaScript的性能、

     var function = new Function(‘val1‘, ‘val2‘, ‘return val1 + val2‘);          //最后一个参数为方法体、前边的都是该方法的参数、

    2.函数可以作为值进行传递、

    函数名存储的是对函数的引用、

    function sum (val1, val2) {

      return val1 + val2;

    }

    function callFunction(func, num1, num2) {

      return func(num1, num2);

    } 

    3.函数的内部属性

    函数内部有两个特殊的对象arguments、和this

    arguments是函数的参数组成的数组、

    function sum(num1, num2) {

      return arguments[0] + arguments[1];   //此处的arguments[0]和arguments[1]分别代表num1和num2、

    }

    arguments还有一个属性callee、这个属性是一个指针、指向了arguments所在的函数、即sum函数、

    function factory (num) {

      if(num < 0) {

        return 0;

      } else {

        return num + arguments.callee(num - 1);    //此处我们使用callee、当我们想把factory函数名换掉时就不用担心函数的内部的问题了、

      }

 

    }

    this是函数内部另一个特殊的对象、this对象引用的是函数所依赖的执行环境的对象、

    var window.color = ‘red‘;

    var o = {color : ‘blue‘};

    function sayColor() {

      alert(this.color);

    }

    sayColor();   //‘red‘

    o.sayColor = sayColor;

    o.sayColor();   //‘blue‘;

    4.函数的属性和方法、length、prototype

    function sum(num1, num2) {

      return num1 + num2;

    }

    alert(sum.length);   //length 代表函数sum的参数的个数、

    函数的prototype属性保存了所有sum实例的方法、例:var s = new sum();则对象s的属性和方法都是指向了sum的prototype属性中的方法、

    【注】ECMAScript 5还定义了一个新的额方法、这个方法创建一个函数的实例、其this值会被绑定到传给bind函数的值、

    var o = {color:‘blue‘};

    function sayColor() {

      alert(this.color);

    }

    sayColor = sayColor.bind(o);

    sayColor();   //‘blue‘

    bind函数并不会改变原有sayColor对this的应用、而是返回的函数将this指向了o、

JavaScript学习笔记【五】