parens如何运作?

Lul*_*ulu 2 javascript function

我在老师的笔记中找到了一段代码,我不明白.关键是要找到函数返回TRUE的"pass"值.你能否回答下面我的问题(评论),所以我能理解这是如何运作的?

<script type="text/javascript">

function findPassword(pass)
{
    var b = 1337

//How is this function returning "min" (without the parens?)

function add(x){
    b += 84
    return min
}

//Same question as above...for "mod" - how is this compiling? 

function min(x){
    b -= 123
    return mod
}

function div(x){
    b /= 3
    return min
}

function mod(x){
    b = b+5+(b%3)
    return add
}

//what is the purpose of "fn" if it is not used at all?

var fn = function ()
{
    b += 34
    return div
}

//WHAT is happening here? "() () ()"

    (function (){
        b /= 3
        return mod
    })()()()

    if(pass == b*b) { 
        return true;
    } else {
        alert("Wrong password !")
        return false;
    }
}
</script>
Run Code Online (Sandbox Code Playgroud)

Mat*_*and 5

所以看看这个:

(function (){
    b /= 3
    return mod
})()()()
Run Code Online (Sandbox Code Playgroud)

你有这个:

function (){
    b /= 3
    return mod
}
Run Code Online (Sandbox Code Playgroud)

这是一个功能.你将它包装在括号中,然后调用它(),这称为立即调用的函数表达式(IIFE).

那它又回归了什么?它返回mod,这是一个函数,所以下一个()将调用该函数.

什么mod回报:

function mod(x){
    b = b+5+(b%3)
    return add
}
Run Code Online (Sandbox Code Playgroud)

它返回add你再次调用的函数().该函数add恰好返回函数min,但由于我们没有(),我们不会调用它,所以它基本上被抛弃了.

现在,这并不是说这是构建代码的方法,因为它不是.

至于什么价值实际上会使findPassword回报成真?好吧,你可以关注b每个函数中发生的事情.

...或者,你可以console.log(b);在IIFE之后坚持一个权利,看看它的价值.pass你需要的价值就是那个数字的平方.