python逆向_webpack

首先需要了解的知识

IIFE是什么?

这个就是一套标准,一个什么的缩写,不用太在意,知道就行了,它规定了什么是自启动函数,就是不用去写调用的代码,自己就会执行,没人管的哈哈哈,类比一下mount挂载函数

function不同写法?

js中有些函数是能够自动载入栈内的,在任何地方调用都行,比如说:

1
2
3
4
5
a();
function a() {
console.log("就哈哈哈哈")
}
a()

有些是通过变量的形式来定义的,所以就不能提前载入栈内

1
2
3
4
5
a  // 这个地方调用就不行的哈
var a = function() {
console.log("哈哈哈哈哈")
}
a

自启动的function长什么样子?

在函数前面加一些特殊符号

1
2
3
4
5
6
7
8
9
10
11
12
!function (a) {
console.log("fuck the world");
}
+function (b) {
console.log("yep we are the fucking world");
}
-function (c) {
console.log("yep none say ");
}
~function (d) {
console.log("cause i really want to stay at your house")
}

在外面加一个())的,{}后面再加一个()

1
2
3
(function () {
console.log("fuck you too")
}())

参数怎么传递的?

承接上文,上面的代码最后一个() 就是用来接受参数的,懂我意思吧

比如:

1
2
3
4
var test = {fuck:"yep"}
(function (arg) {
console.log("fuck you too"+arg.fuck)
}(test))

参数传递方法有call(),bind(),apply()

call和bind其实很像,不能说很像,只能说看起来一摸一样的,就是调用的时候后者返回的是一个函数

call()

这个call第一个参数为null或者为underfined 的时候,那么this在浏览器中就相当于一个window对象,后面的就为真实参数了,真实参数就是用逗号隔开了,这也就是和apply函数的区别,apply的函数后面的真实参数在一个数组里面。

1
2
3
4
function a(arg0,arg1){
console.log("fuck" + arg0 + arg1);
}
a.call("you","too");

WebPack实列

这个时候回到真实的案列当中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
!function (allModules) {
function useModule(whichModule) {
allMoudules[whichModule].call(null,"Hello fucktheworld");
}
useModule(0);
}([
function moudule01(arg) {
console.log("moudule01" + arg);
},
function moudule02(arg) {
console.log("moudule02" + arg);
},
function moudule03(arg) {
console.log("moudule03" + arg);
}
])

这个讲解一下,[]里面的参数用逗号隔开,useModule(0)使用的是第一个函数