2016-01-24 34 views
-3
var f1 = function(input) { 
    var result = 1; 
    return result; 
} 

var get_encrypted = function(func) { 
    var str = 'zzoon'; 

    return function() { 
     return func.call(null, str); 
    } 
} 

var encrypted_value = get_encrypted(f1)(); 

我無法理解這段代碼。 func.call(null,str);是什麼意思? 請總體解釋這段代碼。`func.call(null,..)`做了什麼?

+1

這意味着,調用函數'fun'即'f1'並將其傳遞給param'str'。可以簡單地寫成'func(str);' – Tushar

+3

參見[Function.prototype.call](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call)。每當有關於方法的問題時,請首先查看文檔。 – user2864740

+0

問題的其他部分需要「學習關閉」。請參閱http://stackoverflow.com/questions/111102/how-do-javascript-closures-work?rq=1和[Eloquent JavaScript:Higher-order Functions](http://eloquentjavascript.net/05_higher_order.html)一個開始。 – user2864740

回答

0

首先,這裏是對Function.prototype.call()的引用。

基本上,call()中的第一個參數是您希望在被調用函數中使用的this對象。 本例中的被調用函數爲f1,代碼爲:get_encrypted(f1)

所以get_encrypted獲取功能f1作爲參數,然後調用f1,與thisnull(當null作爲第一個參數傳遞)。現在f1可以在其代碼中使用this,但在這種情況下,this將是null將不值得。 f1也獲得'zzoon'作爲input的第二個參數,但它忽略了input

get_encrypted被調用,通過代碼get_encrypted(f1)();,它返回結果的功能f1,其中f1使用或可能使用null作爲this(即返回結果的函數)。這個結果是1