1、函数声明和函数表达式有什么区别 (*)
·函数声明后面没有分号,而表达式有分号。
·函数声明有声明前置,而函数表达式没有。
图中只有var test2被提升了,test2(1);会报错,不是一个函数。
2、什么是变量的声明前置?什么是函数的声明前置 (**)
·什么是变量声明前置:把变量的声明(var)提到作用域的最前面。
·什么是函数的声明前置:就是把整个函数(function)提升到当前作用域的最前面。
3、arguments 是什么 (*)
arguments是一个类数组对象,可以传入function内部所有的参数(本地变量),但不是函数的属性,只在函数内部有效,写法是arguments[i]依次对参数进行访问和修改。
4、函数的重载怎样实现 (**)
js中没有直接的函数重载,但是可以实现类似的效果。
①通过传入参数实现重载
·通过arguments来实现重载
console.log(sum(2,3,4));输出结果9
·函数覆盖重载
5、立即执行函数表达式是什么?有什么作用 (***)
·立即执行函数是一个表达式,让函数在定义后就立即被执行。
(function(){})();
一、可以不必为函数命名,避免污染。
二、形成了一个单独的作用域,封装起来一些外部无法读取的私有变量。
6、什么是函数的作用域链 (****)
作用域链是内部上下文所有变量对象(包括父变量对象)的一个列表,用来查询变量的。在代码执行的时候,所有需要用到的变量现在当前的作用域中查找,如果没有,就往上面一个作用域去寻找,一直到全局作用域的寻找,如果找到就会停止(不会理会上一级可能有的同名变量),找不到就一直往上级,直到全局作用域。如果一直找不到,就报错了。