2014-09-12 97 views
-2

對不起,問這樣一個新手的問​​題,這裏是我的codeschool看到代碼:將參數傳遞給Javascript中的內部函數?

var hidden = mystery(); 
var result = hidden(3); 

function mystery (){ 
    var secret = 6; 
    function mystery2 (multiplier) { 
     multiplier *= 3; 
     return secret * multiplier; 
    } 
    return mystery2; 
} 

我的問題是hidden(3)等於叫mystery(3)?如果是,在撥打mystery(3)後,爲什麼multiplier這是功能mystery2的參數得到3的值?這段代碼的結果是54

+1

你的意思是'multiplier * = 3;'?因爲有人決定該功能應該這樣做。我不認爲我理解你的問題。或者你的意思是'var result = hidden(3);'?這是因爲'hidden' *是* mystery2',它接受一個參數'multiplier'。你正在傳遞'3'。 – 2014-09-12 19:16:02

+1

它不會將3分配給'multiplier'。 – 2014-09-12 19:16:58

+0

@FelixKling我認爲隱藏是神祕的()而不是神祕2(),這就是我要求的 – 2014-09-12 19:31:06

回答

1

我的曲注意是hidden(3)等於撥打mystery(3)

不,它不是。的hidden值是返回值的mystery(),這是mystery2

// you are calling mystery and assign its return value to hidden 
var hidden = mystery(); 

如果你想看到什麼樣的價值hidden有,只是console.log(hidden);

所以致電hidden(3)與致電mystery2(3)相同。由於mystery2具有一個名爲multiplier的參數,因此將3傳遞給mystery2將該值分配給該參數。


我想了解這裏的重要概念是:

在JavaScript中,函數只是對象,因此可以被傳遞到或從像另一個對象/值的函數返回。

+0

謝謝!這對我來說真的很有意義 – 2014-09-12 19:47:40

2

我認爲你是在*糊塗=操作符是不分配它的功能相當於:

multiplier = multiplier * 3;