標籤:div 檢測 隱式 app ++ bsp 結果 作用 sel
函式宣告
function funName(parameter){}
函數運算式,並把函數儲存在變數x中
//不用給函數名,後續並不能直接用給定的函數名調用var x = function(a){return a};x;//返回的是一個函數對象x();//調用函數
用函數建構函式定義一個函數(參數, 運算式)
var myFunc = new Function("a", "b", "return a + b");
函數提升:聲明會自動提前,賦值的不提升
myFunc(10);function myFunc(x){return x;}
函數自動調用自己執行
(function callSelf(){alert("i call myself");})();
函數是對象
function myFunc(){};typeof myFunc;//類型為 function
顯式參數:形參(C++) 隱式參數:實參(C++)
參數規則:對隱式參數不進行類型檢測,也不進行個數檢測
預設參數:如果沒有給隱式參數,那麼顯式參數的值為undefined
function myFunc(x){ x = x||0;//若x是undefined,則將其值設為0}
arguments對象:function的內建屬性
function myFunc(){ var n = arguments.length;//參數的個數 //遍曆輸出每一個參數 for(var i = 0; i < n; i++) { alert(arguments[i]); }}
參數傳遞:按值傳遞(C++)
//不是對象的是按值傳遞var a = 0;function ma(a){a = 4;}ma(a);//結果沒有變化//隱式參數是按值傳遞var c = [1,2,3];function mc(){arguments[0] = 3;}mc(c);//c的值沒有變化
參數傳遞:按引用傳遞(C++)
var b = [1,2,3];//顯示參數,且參數是一個對象function mb(b){b[0]=3;};mb(b);//b的值發生變化
函數調用,有4種調用方式,區別在於this的初始化
this指向調用函數的對象
//作為一個函數調用function myFunc(){ return this;}//返回window對象,因為預設屬於window全域對象myFunc();
//作為對象的方法調用var myObj={ myFunc:function(){return this;}};myObj.myFunc();//返回myObj對象:Object {myFun: function}
//用建構函式調用函數,建構函式中的this沒有任何值function myFunction(){return this;}//this指向執行個體化後的對象:myFunction{}var myFunc = new myFunction();
//作為函數方法調用函數function myFunction(a,b,c){return this;}//第一個參數myObj會成為thisvar a = 0, b = 0, c = 0;myObj = myFunction.call(myObj, a, b, c);//按參數一個個對應給出var arr = [0, 0, 0];myObj = myFunction.apply(myObj, arr);//參數組合成一個數組
js閉包(python中也類似)
可訪問上一層函數範圍裡變數的函數
var add = (function() { var counter = 0; return function() { return counter += 1; };})();//自調用函數add();add();//計數器會遞增
var x = function(){return function(){alert("abc");};};x; //function(){return function(){alert("abc");};};x(); //function (){alert("abc");}x()();//會執行alert("abc")
js學習——函數