作用域和自执行函数

 

 

 

 

一、变量作用域

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_+""

 

posted @ 2023-07-10 15:27  xingmeng1  阅读(9)  评论(0编辑  收藏  举报