JavaScript 基礎(四)【函數】

1 函數

應用場景:當某些事件觸發時才執行的代碼塊。
程序的語句是按順序執行的,如果我們需要在滿足某些條件或發生某些事件時執行,就需要使用函數。

1.1 定義

函數是能實現一定功能的代碼塊
作用:對事件做出響應,可重複執行
聲明:function關鍵字

1.2 調用

使用函數名稱+括號的方式調用;
方式:

程序中直接調用: test();

元素上調用:<button onclick="change()">點我</button>

程序中添加事件綁定

function test(){
	alert('hans')
}
function test1(){
	alert('test1')
}

var pTag = document.getElementById('change_color');
pTag.onclick=test;
//pTag.οnclick=test1;
pTag.addEventListener('click',test);
pTag.addEventListener('click',test1);

on綁定和addEventListener綁定的區別:
on只能綁定一個函數,後者會覆蓋前者;addEventListener可以綁定多個函數,程序依次執行。

1.3 參數

參數就是調用函數時傳給函數的數據
實例:計算器功能,輸入兩個數字,輸出它們的和;
調用函數的時候需要給函數傳入兩個數字,函數接收這兩個數字,然後輸出他們的和

function sum(x,y){
	console.log(x+y);
}
sum(3,4);
用來接收參數的x,y稱爲形參,調用時傳入的34稱爲實參

Arguments對象,可以獲取傳入的所有參數
參數和變量沒有本質區別
上述例子可以不用參數來實現

1.4 返回值

有些函數執行後會計算出一些數據,我們可以使用return將數據返回,供以後使用return 語句,將值返回調用它的地方

function sum(x, y) {
	var z = x + y;
	return z;
}
var aa = sum(3, 4);
alert(aa);

1.5 變量作用域和生命週期

全局作用域,局部作用域,塊級作用域,循環作用域
Var
全局變量:從聲明到關閉頁面
局部作用域:從聲明到函數執行結束
Let
塊級作用域:在指定塊的作用域之外無法訪問的變量,它存在於
1、函數內部
2、{}之間的塊區域內
循環作用域:只在當前循環內部有效
作用域鏈:子對象會一級一級向上尋找所有父對象的變量,反之不行。

1.6 函數種類

1.6.1 聲明函數

使用function關鍵字聲明,使用函數名稱加括號調用
函數提升:可以吧函數放在調用後面(執行代碼之前會先讀取函數聲明)
例如:function my(){} 就是聲名函數
注意:如果函數名稱重複,下面的函數會覆蓋上面的

1.6.2 匿名函數

函數如果沒有名字,就是匿名函數。
匿名函數不能直接調用。
1、通過變量調用
把匿名函數賦給一個變量,通過變量調用來調用匿名函數

var a = (function(){});
a();

2、直接調用(也叫自調用函數或者立即函數)
兩種寫法:

(function(){}());
(function(){})();

1.6.3 函數表達式

在使用之前必須先賦值

var obj = function(){
	alert("a")
}
obj();

1.6.4 拓展(回調函數、閉包函數)

1、回調函數
函數作爲參數調用

//函數聲明,fn是一個參數同時又是一個變量
function f1(fn){
	fn(); //函數調用--說明fn這個變量中存儲的是一個函數
}
function f2(){
	console.log("函數可以作爲參數使用")}
f1(f2); //調用f1,將f2作爲參數傳進去
//結果:函數可以作爲參數使用

2、閉包函數
閉包是一個可以讀取其他函數內部變量的函數

//例1
function fn(){
	n = 100;
	function fn1() {
		console.log(n);
	}
	return fn1;
}
var result = fn();
result(); //100
//例2
function fn(){
	n = 100;
	nadd = function(){
		n += 1;
	}
	function fn1() {
		console.log(n);
	}
	return fn1;
}
var result = fn();
result(); //100
nadd();
result(); //101

閉包的優缺點:
可以讀取其他函數內部的變量,並讓這些值永遠保存在內存中;但是它會攜帶包含他函數的作用域,因此佔的內存會比較多

1.7 This指向

This關鍵字指向當前對象,誰調用函數,this就指向誰

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章