2016-01-24 85 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