2014-04-06 59 views
1

我有一個關於Javascript語言的一般問題。 當我定義一個這樣的函數:當沒有值傳遞時,是否聲明瞭一個函數的參數?

{ 
    var some_func = function(arg1, arg2) { 
    //some code here 
    } 
} 

和我僅傳遞的第一個參數這樣的功能:

var variable = some_func(a1); 

是所限定的第二個參數arg2但隨着undefined值或者是它完全undefined

或者解釋一下:函數的參數簡單地定義爲變量或對象屬性,當函數被定義時,或者是否存在一些動態的declar幕後操作機制?

+1

爲什麼會得到字符串值'undefined'?它只是未定義的。 – Jonathan

+0

因此它是定義還是未定義? –

+1

成爲或不是......您是否試圖測試是否給出了一個值?這通常是通過測試參數是否可以像這樣被聲明爲'true'來檢查:'arg2 = arg2 || 「default;」 – Jonathan

回答

2

考慮聲明變量和定義變量之間的差異。

  • 一個聲明變量意味着該變量名在當前範圍存在,並且指的通過名稱變量不會產生基準誤差

  • 一個定義變量是一個變量,其值不undefined

函數的形參總是聲明,但它們只有定義如果函數調用給定了這些參數的定義值。

同樣,沒有任何賦值的變量聲明(如var foo;)將使foo在其包含範圍內聲明,但不會爲foo提供定義的值。

有關形式參數和arguments變量的更全面,面向特定的概述,請參閱thefoutheye's answer

+0

'定義的變量是一個變量,其值不是未定義的,'var a = undefined'怎麼樣? ;) – thefourtheye

+0

@thefourtheye,另外,'var a; console.log(a);'未定義 –

+0

這個答案對於OP是有誤導性的。 –

1

arg2將只有undefined但它被定義。當我說定義,我的意思是說,你所定義的參數,但如果沒有通過的值,就會產生undefined

爲了坡口,

讓我們把這個功能是這樣的:

var some_func = function(arg1, arg2) { 
    alert(arg1); alert(arg2); 
    } 

some_func('a'); // alerts a and undefined 
some_func('a','b'); // alerts a and b 

甚至更​​澄清:

var x; // defined but has undefined value will not throw error Result in undefined 
y; // not defined and throws a value. Result in ReferenceError 

在這種情況下,arg2是樣可變x

3
function foo(bar) { 
    console.log(bar); 
    console.log(baz); 
} 

> foo() 
< undefined 
< ReferenceError: Can't find variable: baz 

參數總是「已定義」,但可能具有值undefined。未定義的變量是真正未定義的並且會導致錯誤。

3

在聲明功能,您定義的所有參數被稱爲形式參數。當你調用函數時,你會得到一個參數列表。在運行時,

  1. 如果參數的數量相匹配的形式參數的個數,每個形參將有與之對應的說法。

  2. 如果參數個數大於形式參數個數,其餘參數傳遞只能用arguments特殊變量訪問。

  3. 如果自變量的數量少於正式參數的數量,則它們將被分配爲undefined

因此,要回答你的問題

是定義但未定義值的第二個參數arg2的或者是完全不確定的

arg2是一個正式的參數,undefined是傳遞給你的情況。

參考 ECMA標準規格文件,部分Declaration Binding Instantiation

從報價,

一個。讓func成爲[[Call]]內部方法啓動代碼執行的函數。讓名稱成爲func的[[FormalParameters]]內部屬性的值。

b。讓argCount成爲參數中的元素數量。

c。令n爲數字0.

d。每串argName的名稱,在列表順序做

i. Let n be the current value of n plus 1. 

ii. If n is greater than argCount, let v be undefined 
    otherwise let v be the value of the n’th element of args. 
相關問題