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)
所以看看这个:
(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你需要的价值就是那个数字的平方.