東西有點繞,需要好好消化,冒泡排序明天補上
-------------------------------------------------------------------------------------------------------
函式:封裝一段特定功能的代碼,然后通過函式名重復呼叫此段代碼
定義函式 function + 函式名(引數){代碼段}:function getSum( ){ } //引數根據情況有或者沒有
函式呼叫:getSum( );
引數:function sum(形參1,形參2){ } //形參沒有實際意義,呼叫函式時用來傳入引數,相當于占位一樣,本身沒有意義
實參:sum(實參1,實參2){ } 實參就是要傳入的引數,有著實際的意義,相當于傳入的變數或者值
實參傳入的順序就是挨個來,不會跳的
舉例:
function sum(a,b){ //ab是形參,占用實參的位置但沒有意義
getSum = a+b;
console.log(getSum)
}
sum(1,2) //呼叫函式 //1,2是實參,替換形參在函式中的位置并執行,相當于給形參賦值a=1
實參也可傳入已賦值的變數,陣列等:
function sum(a,b){
getSum = a+b;
console.log(getSum)
}
var x=1;
var y=2
sum(x,y)
呼叫的時候想當與將實參復制一份傳給形參,所以改變形參的值,實參的值不會被改變
函式回傳值 return,即函式執行完畢需要提取的東西,可以回傳函式的結果,回傳的結果可以用變數接收,x=getSum() return 也可提前結束函式(函式運行到return自動結束,后面不執行),return之后也可什么都不跟,回傳undefined
求1!+2!+3!+4!……n!
function getChengJi(i){
var k = 1;
for(m=1;m<=i;m++){
k*=m;
}
return k;
}
console.log(getChengJi(3))
function getSum(n){
sum=0;
for(a=1;a<=n;a++){
sum+=getChengJi(a)
}
return sum;
}
console.log(getSum(3))
arguments的使用:陣列內部物件,可通過arguments獲取函式呼叫的時候傳入的實參
arguments非常像陣列但不是陣列 //其他的放在js高級里講,
冒泡排序:
函式其他概念(一部分,其余在js高級中講)
匿名函式:沒有名字的函式就是匿名函式,通常將一個沒有名字的函式付給一個變數,通過變數來呼叫匿名函式
a=function( ){ };
匿名函式還可進行自呼叫,即自呼叫函式:函式寫完之后立即呼叫,不需要單獨呼叫,末尾的()就相當于呼叫了函式
自呼叫:(function( ){ }) ( )
例如:(funciton(){
console.log("這是一個自呼叫函式")
})( )
自呼叫函式不需要單獨呼叫,可直接運行
函式也是一種資料型別,即函式型別的變數:,所以函式也可當做引數傳遞
a=funcition(){ }
cosole.log(typeof.a) //結果為function型別
函式當做引數傳遞:
var a= function(){
console.log("我是傳過來的");
}
function b(k){
k();
}
b(a);
由于函式屬于一種資料型別,所以也可被回傳return //注意,回傳的要寫匿名函式
function a(m){
b=4;
return function(){ //回傳一個匿名函式
console.log(m+b)
}
}
s = a(3); //給s賦的值是一個函式,輸出s就是函式的代碼,需要再次呼叫才能運行
console.log(s); //回傳匿名函式代碼
s(); //呼叫了回傳的函式
作用域:變數或者函式可以起作用的范圍
全域作用域:在全域定義的變數在任何位置都可以訪問(函式外部)
函式內部定義變數若不用var定義,則屬于全域變數!!!!!!!!!!!!!
區域作用域:函式內部就是區域作用域,區域變數就是內部var定義的變數
注意:function W(){var a= b = c =5;} 符合規范,但是只有a前面有var,所以只有a是區域變數,bc是全域變數
ES6新增塊級作用域: 即{ }中的代碼稱為代碼塊,其內部單有作用域,內部變數外部無法訪問
區域變數在函式執行完畢被銷毀(記憶體回收),全域變數在瀏覽器被關閉后才會被回收
作用域鏈:
// 全域作用域----0級作用域鏈
var a=5;
function f1(){
// f1區域作用域----一級作用域鏈
var a = 10;
function f2(){
// f2區域作用域----二級作用域鏈
console.log(a);
}
f2(); //
}
f1(); //結果a=10 作用域先在當前域找,沒有的話一層一層往外找
預決議:代碼執行的時候都會有預決議,只有順序不正常才會有改變
1.變數提升,把變數的宣告提升到當前作用域的最上面,不包括變數的賦值
console.log(a); //由于預決議,所以不報錯,由于只提升變數不提升變數賦值,所以輸出undefined
a= 5;
2.函式提升,把函式的宣告提升到當前作用域的最上面,不包括函式的呼叫
f();
function f(){ console.log(1);} //由于預決議,提升函式宣告,所以輸出1
預決議案例:
var a=4;
function f(){
console.log(a); //由于當前作用域有a,所以預決議之后,輸出undefined
var a=2;
console.log(a); //a在前,所以a=2
}
f();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/281179.html
標籤:其他
下一篇:electron-vue配置問題
