10.9號函式的定義
- 函式 關鍵詞function
複習
Var 是js的關鍵字,用於宣告變數,宣告在記憶體模組完成,定義(=)是在執行模組完成。
Var可以在記憶體模組提前(js程式碼執行前)完成所以有變數提升這個功能。
因為a沒有帶var,所以不存在變數提升,瀏覽器會把他當成window的屬性。
Function也是js的關鍵字,用於宣告和定義函式的,宣告和定義都在記憶體模組完成了。
Function 也是記憶體模組提前完成,所以有函式提升這個功能。
變數提升和函式提升 都叫預解釋。都是瀏覽器的。
2.函式的定義:函式:具有一定功能的程式碼塊。
函式是通過function定義的,function 後跟的是函式名。
結構語法
function fn(){}
通過上圖我們可以發現,記憶體模組只存var的變數名。而存function整個程式碼塊,因為宣告和定義同時完成的。
函式結構的注意的
函式定義 通過function 定義 function fn(){}
函式定義的四種方式
- 宣告式定義 function fn(){}
- 表示式式定義 var an=function(){} 匿名函式
- 自呼叫
定義和呼叫同時完成。
4.通過 物件的形式 var as=new Function(){}
函式呼叫 函式名() fn()
函式最大的優勢 會形成一個獨立的模組,可以按需使用,可以重複使用。
按需使用 可以提升效能 重複使用 減少程式碼冗(rong 三聲)餘。
函式呼叫的過程
函式執行時會形成一個自己的私有作用域。最大的作用域是window(全域性作用域)
然後執行函式裡面的程式碼塊。
作用域鏈:函式內部的變數被使用時,首先會在自己的私有作用域下查詢是否有這個變數,有就直接使用,沒有就會向他的上一級查詢,父級就使用父級的,父級沒有就會以此繼續向上查詢直到window為止,window有就使用沒有就is not defined。這種查詢機制我們叫作用域鏈。
函式歸屬誰,跟她在哪呼叫沒有關係,而是在哪定義有關。
函式遞迴:函式內部內部呼叫自己
Break 和continue運算
Break 終止當前程式
Continue 跳出當前的程式,執行下一個
// console.log(a)
// console.log(b)
// var a=12;
// b=12;
// function fn(){
// console.log(12)
// }
// fn()
// function fn(){
// console.log(123)
// }
// as()
// var as=function(){
// console.log(12)
// }
// var a=12;
// function fn(){
// console.log(a)
// var a=144;
// console.log(a)
// }
//
function fn(){
console.log(123);
function ff(){
console.log(52)
}ff()
}fn()
// fn()
// var sum=0;
// var i=1;
// function fn(){
// sum=sum+i;
// i++;
// console.log(sum)
// fn()
// }
// fn()
// (function(){
// console.log(412)
// })()
// !function(){
// console.log(12)
// }()
var a = 123;
function fun(){
alert(a);
a = 456;
}
fun();
alert(a);