1.函数声明和函数表达式有什么区别 ?
函数声明 function Name(){函数体}
函数表达式 var 变量=function (){};
Javascript 中函数声明和函数表达式是存在区别的,函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用。而函数表达式的值是在JS运行时确定,并且在表达式赋值完成后,该函数才能调用。
2.什么是变量的声明前置?什么是函数的声明前置?
- 所谓的变量声明前置就是在一个作用域块中,所有的变量都被放在块的开始出声明
- 而函数的声明前置因为JS引擎 将函数名视同变量名,所以采用function命令声明函数时,整个函数被提升到代码头部。采用赋值语句声明函数时,函数在原位置被声明。
3.argument是什么?
argument是一个类数组的对象。可以将参数传入argument对象中,并且能调出数组的长度,以及当前函数的参数。
4.函数的重载怎样实现?
允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数必须不同。但在js中没有函数重载的概念,因为即使函数名相同,参数不同,也被认为是相同的函数。(例子1)
5.立即执行函数表达式是什么?有什么作用
语法
(function sum(i){ })( );
(function sum(i){ }( ));
var a= function sum(i){ }( );
不必为函数命名,避免污染全局变量
函数内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。通常只对匿名函数使用。
6.什么是函数的作用域链
当一个函数被调用时,他先访问自身的变量,不存在时就回去访问父级函数的变量,知道访问全局变量为止。这种链式的过程称为作用于链。只能从内到外,不能从外到内。