js學習二函式

EpisodeOne發表於2016-05-15
一、定義函式的兩種方法:
1.函式宣告
function func(){
}
2.函式表示式
將匿名函式賦值給一個變數
var func = function(){

}

二、函式引數:

函式裡的自帶引數arguments,注意只在函式裡才有,外部沒有。arguments是一個陣列,輸出時報錯:
 Uncaught ReferenceError: arguments is not defined
 所以預設值應該是 undefined
js函式中有個儲存引數的陣列arguments ,所有函式獲得的引數會被編譯器挨個儲存到這個陣列中。
程式碼:
<pre name="code" class="html"><span style="font-size:14px;">var add = function(num1, num2) {
	return num1+num2;
}
document.write('指定引數')
document.write(add(2))
// NaN
document.write(add(2,5))
// 7
document.write(add(2,5,6))
// 7

var addOpt = function () {
	document.write(arguments[0])
	var length = arguments.length,
		sum = 0,
		parameter;
for (var i=0;i<length;i++) {
	parameter = arguments[i];
	sum = sum + parameter;
}
return sum;
}
document.write('多引數')
document.write(addOpt(2))
// 2
document.write(addOpt(2,5))
// 7
document.write(addOpt(2,5,6))
// 13
document.write(addOpt(2,5,6,2))
// 15
document.write(arguments.length)</span>


注意:
當引數是原始資料型別時,是值傳遞,原始數值不變;
當引數是物件資料型別時,是引用傳遞,會改變原有的物件;

三、作用域:

限制了變數起作用的範圍

四、作為物件屬性
可以利用this指定當前物件

五、建構函式
提高了產生同型別物件的時間和程式碼量
程式碼:

<span style="font-size:14px;"><!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Construction</title>
</head>
<body>
<script >
function Point(x, y) {
	this.x = x;
	this.y = y;
	this.move = function(stepX, stepY) {
		this.x += stepX;
		this.y += stepY;
	}
}
var point1 = new Point(1,1)
var point2 = new Point(2,2)
var point3 = new Point(3,3)
//point的值就是this,this是返回值
document.write('ponit');
document.write(point1);
// [object object]
document.write(point1.x)
point1.move(2,1)  //(3,2)
point2.move(2,1)  //(4,3)
point3.move(2,1)  //(5,4)
</script>
</body>
</html></span>
六、原型
程式碼:

<span style="font-size:14px;"><!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>ProtoType</title>
</head>
<body>
	<script >
		function Point(x, y) {
			this.x = x;
			this.y = y;
		};

		Point.prototype.move = function (stepX, stepY) {
				this.x += stepX;
				this.y += stepY;
		};
		// 公共屬性或者方法
		var point = new Point(1,1);
		point.move(2,1);
		console.log(point);
		// document.write('point.x');

	</script>
</body>
</html></span>
原型可以設定建構函式的例項共有的方法或者屬性:Point.prototype.func(){}

注意prototype的寫法不是protoType,否則會報錯:

 Uncaught TypeError: Cannot set property 'move' of undefined


相關文章