實(shí)參:實(shí)際參數(shù)(所有的數(shù)據(jù)類型都可做實(shí)參)
形參:形式參數(shù)(變量)
function fn( x , y , z ...){ //x,y ...叫形參(變量名)
alert( 1 ); ===>相當(dāng)于在函數(shù)內(nèi)部定義了一個(gè)變量;
}
fn( 8 );//實(shí)參(實(shí)際參數(shù))
function fn( x ){
aleret( x );
}
fn( 55 ); //彈出55;把55傳給x x=55;
實(shí)參與形參一一對(duì)應(yīng)托慨;
例:
function fn( x , y ){
alert( x + y );
}
fn( 10 , 20 ); //x = 10 y = 20 彈出:30
fn( 8 , 2 ); //x = 8 y = 2 彈出:10
fn( 2 , 3 左胞, 4 ); //4沒有對(duì)應(yīng)的形參,4不會(huì)被傳
fn( 2 ) //彈出:NaN x = 2 y = undefined x + y 彈出NaN
fn( '2' ) // x = '2' y = undefined x + y = 2undefined
例題:
var a = 10;
var b= 20;
function fn(){ //a是形參 a = b ===> a = 20
alert( a + b ); //這里b局部(里面)變量你雌,里面沒有定義b變量器联,只能從外部調(diào)用二汛,b=20;
}
fn( b ) ===>這里b是變量 b = 20
彈出:40
注意:局部變量可以從全局里調(diào)用;
??????全局變量不能從局部里調(diào)用拨拓;
例:
var a = 10;
function fn(){
alert( a );
var b = 20;
}
alert( b ); ==> 調(diào)用不了var b = 20;
解決方法:
var x ; //定義一個(gè)x;
function fn(){
var b = 20;
x = b ;
}
alert( x );
全局定義一個(gè)變量肴颊,然后到局部里賦值;再出來渣磷。
var a = 10;
var b= 20;
function fn(){
alert( a + c );
}
報(bào)錯(cuò)
注意:
NaN 不會(huì)報(bào)錯(cuò)是合法數(shù)據(jù)婿着,只是里面某個(gè)地方做了非法的運(yùn)算;
null 醋界、undefined 竟宋、NaN不會(huì)報(bào)錯(cuò);是合法的數(shù)據(jù)形纺;
報(bào)錯(cuò):里面有語法錯(cuò)誤丘侠;
不定參
arguments ==>存儲(chǔ)所有實(shí)參的集合是個(gè)類數(shù)組;
例:
function add(){
alert( arguments[ 2 ] );
}
add( 2 , 5 , 8 ); 彈出 8逐样;
想當(dāng)于:arguments = [ 2 , 5 , 8 ]; 類數(shù)組
所以alert( arguments[ 2 ] ) 就會(huì)彈出 8
function add( x , y , z ){
alert( arguments[ 2 ] );
}
add( 2 , 5 , 8 );
這里有 x , y , z 形參不會(huì)影響 arguments
案例:
1蜗字、點(diǎn)擊盒子運(yùn)行有名函數(shù)且要傳參數(shù)
function fn( b ){
alert( b );
};
如果這樣寫:
document.onclick = fn( 2 ); //fn()馬上會(huì)自執(zhí)行,沒點(diǎn)擊之前就馬上執(zhí)行官研;
解決方法:
document.onclick = function (){
fn( 2 );
}
//點(diǎn)擊的時(shí)候才會(huì)執(zhí)行 function (){ fn( 2 ); }
2秽澳、傳一個(gè)函數(shù)
function y( x ){
x();
}
y( function (){ alert(2); } )
這里想當(dāng)于 y()里的函數(shù)當(dāng)成一個(gè)實(shí)參傳進(jìn)去 x = function ( ){ alert(2); }
里面的 x( ) 再讓函數(shù)執(zhí)行;
function y( x ){
x( 10 ); a
}
y( function (x){
alert( x ); b
} ) ===>彈出 10戏羽;
相當(dāng)于:
y( function (x){ 等同于 ==> y( function ( x ){ alert( x ); } )
alert( x ); 把括號(hào)里傳到 a 函數(shù)里
} ) x = function ( x ){ alert( x ); }
x( 10 ) 把10傳到給 x 就彈出 10
注意: a函數(shù)與b函數(shù)的x是不一樣担神;a的全局的x;b的是局部里的x始花;
return返回值
返回return后面的數(shù)據(jù)
例:
function x( ){
alert( 2 );
}
x() ===>彈出 2
alert ( x() ) ===>彈出undefined;
所有函數(shù)沒有return的時(shí)候返回都是undefined
function x(){
alert( 2 );
return '阿里';
}
alert ( x() ); 彈出 ===> 阿里
return后面是什么返回的就是什么妄讯!
例題:
function add(){
var length = argument.length;
sum = 0;
for(var i=0 ; i<length ; i++){
sum += argument[ i ];
}
return sum;
}
var x = add( 3 , 4 , 6 ); ==> 13
var y = add ( 5 , 7 , 8 ); ==> 20
alert( add( x + y) ) ==>彈出 33
return阻斷 (只對(duì)函數(shù)起作用)
例:
var x = 10;
(function fn(){
x++;
return ; //執(zhí)行到這里就返回了;下面的代碼就不執(zhí)行酷宵;
x -- ;
})();
alert( x );
例:
var i = 0;
function fn(){
for( ; i<100 ; i++ ){
if( i === 50 ){
return; //執(zhí)行到這里的被阻斷亥贸,下面的i++ 跟for里面的 i++ 都不執(zhí)行
}
i++;
}
}
fn();
alert( i );
函數(shù)一旦執(zhí)行到return 就立馬結(jié)束,后面的代碼不會(huì)再執(zhí)行浇垦;
例題:
document.onclick = a();
function a(){
alert( 1 );
}
為什么沒有點(diǎn)擊事件炕置;就是因?yàn)闆]有return的時(shí)候返回值是undefined,傳給document男韧;
解決方法:
document.onclick = a();
function a(){
return function (){
alert(1);
}
}
}
直接返回一個(gè)函數(shù)給document
document.onclick = a()();
function a(){ ===>外層
alert( 1 );
return function (){ ===>1層
alert(2);
return function (){ ===>2層
alert( 3 );
}
}
}
} ==>彈出 3
a()執(zhí)行完后返回一層
function (){ ===>1層
alert(2);
return function (){ ===>2層
alert( 3 );
}
}
a()()再讓一層執(zhí)行 返回的是2層
function (){ ===>2層
alert( 3 );
}
最后彈出3朴摊;