2013-07-16 35 views
0

的HtmlJavaScript函數定義和函數調用的區別

<!DOCTYPE html> 
<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script> 
<meta charset=utf-8 /> 
<title>JS Bin</title> 
</head> 
<body> 
    <input type='button' name='test' id='test' value='Click'/> 
</body> 
</html> 

的Javascript

$(document).ready(function(){ 
    $('#test').on('click',function(){ 
    var a = 10; 
    testFunction(a); 
    }); 
}); 

function testFunction(a,b){ 
    alert(a); 
} 

這裏當我點擊點擊按鈕,它會提醒10.But在函數調用我只有一個參數,並在函數定義我有兩個參數。所以它爲什麼會提醒該值,而不是產生有關參數數量的任何錯誤。

+0

我剛剛離開這個鏈接[HTTP ://javascript.info/tutorial/arguments]你可以在這裏閱讀更多關於函數參數的信息。 –

+0

還有一件事。如果您添加了一個函數,如函數'testFunction(a,b,c){alert(a); }'。並嘗試使用螢火蟲進行調試。而不是你的第一個功能,這將被觸發。 – Nithesh

回答

0

JS中的參數是動態的,如果已經定義了一個參數但沒有傳遞或者在函數內使用它,那麼它不會拋出錯誤。如果你想檢查至少有2個參數,你可以這樣做:

function test(a,b) { 
    if (arguments.length < 2) { 
    // throw error, or return false, or something else 
    } 
} 

你甚至可以使用未在該功能通過arguments僞數組定義的參數。參數的數量在您調用函數時確定,而不是在創建時確定。

0

除非你這樣做,否則不需要參數。 JavaScript是動態的,所以不使用的參數會被忽略。

function testFunction(a,b){ 
    if (b == undefined) throw new Error("Variable b in testFunction is undefined"); 
    alert(a); 
} 
2

這是因爲在JavaScript中的參數是可選

他們有一個默認值,以便在僞代碼這將是

function testFunction(a = undefined,b = undefined){ 
    alert(a); 
} 
+0

+1好答案.. – Nithesh

0

在Javascript中的函數定義中列出的參數是命名參數。然而,它們是可選的。所以這是完全有可能打電話給你的功能是這樣的:

testFunction(1); 
testFunction(1, 2); 
testFunction(1, 2, 3); 

在參數b的值將是undefined尚屬首例。 在第三種情況下,沒有變量接收值3.但它仍然存在。所有傳遞給函數的值都可以通過arguments數組訪問。因此arguments[2]將包含值3.

鑑於此靈活性,還有一個缺點。與許多其他編程或腳本語言不同,Javascript中沒有函數多態。這意味着只能有一個名稱相同的函數。所以,你不能定義2個功能是這樣的:

function testFunction(a, b) { ... } 
function testFunction(a, b, c) { ... } 

你可以找到的Javascript功能的詳細信息都在互聯網上,但這個頁面是一個良好的開端:http://javascript.info/tutorial/arguments

相關問題