补充js知识:
(1)arguments是一个对应于传递给函数的参数的类数组对象。
arguments对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数,第一个参数在索引0处。
(2)对函数表达式加上(),是可以直接调用的
但是如果是对声明式的后部加上()则是会被编译器忽略。
var fn2 = function(){}();//对,就是这样
而平常的function(){}则是一种声明式,如果加上()括号后,则会被编译器认为是函数表达式,(加上+-号都可以),从而可以用()来直接调用.
(function(a){})(1)相对与在执行之前赋值给a。
function(){}()是一种立即执行函数的写法,即IIFE等设计模式。这种函数在函数定义的地方就直接执行了。
!function(){}()写法和(function(){})()是相同的
①函数后的();表示要执行这个函数;
②而();要求前面必须是一个表达式。(最后有js表达式的定义)。
③所以“!”的作用是将function(){}函数体转为一个函数表达式。
第一步:从栈堆找到密码传输的初始栈堆,发现密码属性是.password
第二部:搜素并下断点,看时候能断住,并且是没加密之前(有个设想,就是所有函数arguement都发送console,然后观测值的产生,但怕值太多)
第三步,去跟值,并确定
function re(e) {
return e % 32;
}
function oe(e) {
return 24 - e % 32;
}
function ne(e, t) {
for (var n = [], r = t ? re : oe, o = 0, i = 8 * e.length; o < i; o += 8)
n[o >> 5] |= (255 & e.charCodeAt(o / 8)) << r(o);
return n;
}
function $(e, t, n, r, o, i) {
return q((i = q(q(t, e), q(r, i))) << o | i >>> 32 - o, n);