函数与作用域

1. 函数声明和函数表达式有什么区别?

  • 函数声明:
    形式上 function fuctionName(){//statement};声明了一个名字为functionName的函数,浏览器解析的时候,先要做函数声明前置,在globlecontext的AO中,声明此函数,此时,你在全球作用域下(包括函数声明之前的位置)调用,都可以找到这个函数。

  • 函数表达式:
    形式上 var someThing=fuction (){//statement};虽然这也是声明了一个函数(匿名的),但实际上浏览器解析的时候,先做的是变量提升,在globlecontext的AO中,声明的是一个变量,假如,在函数声明之前调用该函数,是不能够找到这个函数的,因为调用的时候必然要调用的someThing这个变量,但是变量值在提升变量的时候未给出。

2.什么是变量的声明前置?什么是函数的声明前置

  • 变量的声明前置:
    变量的声明前置就是在函数内部,首先要做的事也是类似于浏览器做变量提升,先在当前上下文的AO中声明这个变量。

  • 函数的声明前置:
    函数的声明前置是,当我们用函数声明来声明一个函数时,函数就会在至当前上下文的AO中声明这个这个函数,同时,在函数内部的上下文的scope中,给声明的函数开辟一个空间,并指向父元素的AO.

3.arguments是什么?

  • arguments是一个伪类数组,目前仅仅知道,他是一个函数内部自带的一个类似于数组的参数,我们可以调用arguments[],来获取传入函数内部的参数,并且支持索引,支持length属性。

4.函数的"重载"怎样实现?

  • 首先,JS中不同于其他语言,没有重载,例如其他语言中,我们可以设定。但是我们可以控制函数体内部的逻辑语句来实现重载。

例如:


                    
                    

你可能感兴趣的:(函数与作用域)