JS复习:第七章

第七章  函数表达式

一、定义函数的方式有两种:函数声明和函数表达式。

1.函数声明:

function functionName(arg0 , arg1 , arg2){
    //函数体...
}

函数声明的一个重要特征就是函数声明提升,在读取代码之前会先读取函数声明。意味着可以将函数声明放在调用代码之后。

2.函数表达式:

var functionName = function(arg0 , arg1 , arg2){
//函数体...
}

创建一个函数并将它赋值给一个变量,这种情况下创建的函数叫做匿名函数。因为function后面没有标识符。函数表达式与其他表达式一样使用前必须先赋值。

二、匿名函数的作用:

1.把函数当成值来用时,可以使用匿名函数。

2.

三、闭包

  闭包是指有权访问另一个函数作用域中的变量的函数。

  如下代码:

function createFunction(){
  var result = new Array();
  for(var i = 0 ; i < 10 ; i++){
    result[i] = function(){
      return i;
    };
  }
  return result;
}

  会有一个明显的问题是返回的所有i值都为10,即数组的最后一个i。

  解决方法是:

function createFunction(){
  var result = new Array();
  for(var i = 0 ; i < 10 ; i++){
    result[i] = function(num){
      return function(){
        return num;
      };
    }(i);
    }
  return result;
}

四、私有变量

  私有变量包括函数的参数、局部变量和在函数内部定义的其他函数。在函数内部可以访问这个变量,但在函数外部则不能访问它们。如果在这个函数内部创建一个闭包,那么闭包通过自己的作用域也可以访问这些变量。有两种在对象上创建特权方法的方式。第一种是在构造函数中定义特权方法,基本模式如下:

function MyObject(){
	//私有变量和私有函数
	var privateVariable = 10;
	function privateFunction(){
		return false;
	}
	//特权方法
	this.publicMethod = function(){
		privateVariable++;
		return privateFunction();
	};
}function MyObject(){
	//私有变量和私有函数
	var privateVariable = 10;
	function privateFunction(){
		return false;
	}
	//特权方法
	this.publicMethod = function(){
		privateVariable++;
		return privateFunction();
	};
}

  

第二种:在私有作用域中定义私有变量或函数,同样也可以创建特权方法,其基本模式如下:

(function(){
   //私有变量和私有函数
   var privateVariable = 10 ;
   function privateFunction(){
       return  false;     
    }   
    //构造函数
    MyObject = function(){
    };
    //公有、特权方法
    MyObject.prototype.publicMethod = function(){
        privateVariable++;
        return privateFunction();
    };
    
})();

  

原文地址:https://www.cnblogs.com/koto/p/5275646.html