js的预解析和作用域

在js执行中,js解析的准备工作首先有两点:
第一:把变量、函数表达式的声明提升到当前作用域的顶端。
第二:把函数赋值。

var k = "10";
var c = function(){};

浏览器的解析之前的工作是怎样的?看看下面的:

var k,c;
k = "10";
c = function(){};

刚刚提到了作用域,可能有人会问什么是作用域,其实js中的作用域就两种:全局作用域和局部作用域。了解作用域之前,我们得知道什么是全局变量和局部变量。

全局变量的声明不用var关键字,直接声明。

局部变量就是在函数内部的声明。

全局作用域就是指在整个应该程序中都是可用的。

局部作用域就是指函数内部声明的变量或函数。

下面来介绍下创建函数的三种方式:

1、函数表达式:是使用function关键字,没有函数名,赋值给一个变量的函数。

var f = function(){
}

2、声明函数:也叫函数声明,是使用function关键字+函数名声明的函数。

function fn(){
}
fn();

3、匿名函数:是使用function关键字但是没有函数名的函数。

(function(i){
    console.log(i)
})(2)

()();这里的第一个()把匿名函数定义成函数表达式,第二个()表示立即执行。

随堂练习:
function compute(){
    var count = arguments[arguments.length-1];
    if(count =="+"){
        for(var i = 1;i <arguments.length-1;i++){
            arguments[0] = arguments[0]+arguments[i];
        }
        //console.log(arguments[0]); 可以打印出来,看下效果
    }
    else if(count =="-"){
        for(var i = 1;i <arguments.length-1;i++){
            arguments[0] = arguments[0]-argument[i];
        }
        //console.log(arguments[0]); 可以打印出来,看下效果
    }
    else if(count =="*"){
        for(var i = 1; i <arguments.length-1;i++){
            arguments[0] = arguments[0]*argument[i];
        }
        //console.log(arguments[0]); 可以打印出来,看下效果
    }
    else if(count =="/"){
        for(var i = 0;i <arguments.length;i++){
            argument[0] = argument[0]/arguments[i];
        }
        //console.log(arguments[0]); 可以打印出来,看下效果
    }
}

compute(1,2,3,"+");
compute(10,5,3,"-");
compute(6,10,3,"*");
compute(500,2,3,"/");

个人一点小小的见解,如有错误,欢迎指正,谢谢!