【志远JS逆向学习笔记】JS中的方法

134 阅读2分钟

Js中正常定义方法的形式是

function 方法名(参数1, 参数2, .., 参数n){
    body // 代码体
    return 返回值;
}
方法名()

这里关于这种正常的方法定义和使用,不在过多介绍,主要介绍一些JS方法的一些特性的内容。

方法定义可以在使用后面

在其他语言,例如C、C++、Python中,如果我们在定义方法前就使用这个方法,会产生BUG,但是在JS中却是可以做到的,例如下面这样一段代码:

var x = 10;
show();
function show(){
    console.log("function:" + x);
    return "sucsses";
}
原因

之所以出现这样的情况,是因为JS在运行过程中,会进行变量和函数的一个提升,会自动将函数的定义放在运行前面,所以像下面这段代码:

var x = 10;
show();
function show(){
    console.log("function:" + x);
    return "sucsses";
}
function message(){
    console.log("hello");
    return "hello";
}
message();

由于JS对变量(var定义的变量才能提升)的和函数的提升,实际上是这样的:

var x = 10;
function show(){
    console.log("function:" + x);
    return "sucsses";
}
function message(){
    console.log("hello");
    return "hello";
}
show();
message();

匿名函数

在js中我们可以直接将函数给到变量,而不是通过function 函数名()...这样的形式去定义函数,例如下面这样:

let show = function(num){
    return num + 10
}
let message = (function(miss){console.log(miss)})
let x = show(15);
console.log(x)
message("hello")

自执行函数

自执行函数是指函数在被定义的过程中就自动运行了,而不是通过函数名去手动调用的,设计一个自执行函数也很简单,例如下面这样:

(function show(){console.log("hello")})()

箭头函数

函数也可以通过箭头进行定义,例如下面这样:

let xx = () => console.log("hello");
xx()

如果执行体需要多行,则加上{}即可,例如这样:

let xx = () => {
    let x = 10;
    console.log(x);
    return x
}
xx()
箭头函数定义规则
let 函数名 = (参数1, 参数2, .., 参数n) => {函数体}

arguments

很多js中会遇到处理arguments的场景,所以我们需要先了解一下这个arguments的作用,它是JS函数中一个特殊的局部变量,也就是仅仅可以在函数内部使用这个内容,作用是加载所有的函数参数,形成一个数组

function add(x, y){
    console.log(x, y);
    console.log(arguments);
}
add(10, 11)