作用域和自执行函数
一、变量作用域
1.1局部变量
function jb() { var a="我是局部变量" return a; }
1.2全局变量
var a="我是全局变量" function jb() { console.log(a) } console.log(a)
二、自执行函数
在加载的时候 这个自执行函数就能自己运行
!(function() { console.log(2) } )()
!表示运行成功
2.1拆解只执行函数的过程
对于这样一个函数 直接运行:
function() { console.log(2) }
除非前面有个var 否则会报错
var a =function() { console.log(2) }
用括号括起来 也不会报错,因为括起来之后就是一个整体,你可以将它理解为一个没有方法名称的方法、也就是闭包。
在括号后面再加一个括号就表示执行这个函数
(function() { console.log(2) } )()
再js逆向中,通过这种方式 可以将一个函数的执行传给另一个函数执行 从而实现逆向。
三、内部函数如何外部调用
!(function() { function jm() { console.log(2) } jm() } )()
可以看到内部函数也可以被掉哟个
如果将内部函数放到外部调用:
!(function() { function jm() { console.log(2) } } )() jm()
就会报错
要解决这个问题 可以在外部定义一个变量,然后将内部的jm赋值给这个变量
var jm_; !(function() { function jm() { console.log(2) } jm_ = jm; } )() jm_()
这里就非常方便我们进行js逆向
因为一个网站的加密就1个或者几个函数,
大概流程是这样
用户输入明文的数据 -> 方法1 -》 发包函数 。。。 -》 加密函数
我们只需要将加密函数拿出来,用python或者易语言去模拟发包,执行这个js的加密函数,
这个加密函数可能嵌套再里面 这个时候 就可以用全局变量的方式 将它拿到外面。
四、变量类型的转换
所有类型的变量 加上字符串 就会变成字符串
所有类型的变量 加上字符串 就会变成字符串
比如一个方法 加上字符串,就会变成字符串
var jm_; !(function() { function jm() { console.log(2) } jm_ = jm; } )() jm_+""