js-4:函数和词法分析


###############    JS函数      ################

//js中函数和python中的函数非常的相似,只是定义的方式有些不同

//函数的定义
function foo(a,b) {
    console.log(a);
    console.log(b);
    return a+b;  //带返回值的函数
}

//匿名函数
//需要使用一个变量去接收他,
var func = function (a,b) {
    console.log(a);
    console.log(b);
    return a+b;  //带返回值的函数
};

//立即执行函数
//先写两个括号,第一个括号内部定义,第二个括号内部传递具体的参数
(function (a,b) {
    console.log("立即执行函数");
    console.log(a+b)
})(11,222);


//arguments
function foo(a,b) {
    console.log(a);
    console.log(b);
    console.log(arguments.length);
    //这个 arguments 根据传入的参数,是一个列表[a,b]
    //可以遍历这个arguments对象
    return a+b;  //带返回值的函数
}

//函数的调用
var ret1 = foo(11,22);
// 调用的时候,如果传递的超出定义的,超出的不起作用,并不会导致程序报错,
//如果传递的参数少于定义的,未定义的就会显示undefined,也不会程序报错,
//这是js比较随便的地方,
console.log(ret1);

var ret2 = func(11,12);
console.log(ret2);


/*
局部变量:
在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。

全局变量:
在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。

变量生存周期:
JavaScript变量的生命期从它们被声明的时间开始。
局部变量会在函数运行以后被删除。
全局变量会在页面关闭后被删除
* */

 

###############    JS词法分析      ################

//js的词法分析
var age =18;
function foo() {
    console.log(age);
    var age =22;
    console.log(age);
}

foo(); //结果是 undefined ,22 ,
//为什么?
//因为函数执行的时候,会对函数内部进行词法分析

/*
JavaScript中在调用函数的那一瞬间,会先进行词法分析。
词法分析的过程:
当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面:
1:函数参数,如果有,则将此参数赋值给AO,且值为undefined。如果没有,则不做任何操作。
2:函数局部变量,如果AO上有同名的值,则不做任何操作。如果没有,则将此变量赋值给AO,并且值为undefined。
3:函数声明,如果AO上有,则会将AO上的对象覆盖。如果没有,则不做任何操作。
函数内部无论是使用参数还是使用局部变量都到AO上找。

* */

  

上一篇:[Leetcode 152]最大乘积子串Maximum Product Subarray 踩坑


下一篇:处理oracle锁表