函数声明和函数表达式有什么区别
- 函数声明
function example( ){
console.log(a1)
}
- 函数表达式
var hanShu=function example( ) {
consolo.log(a2)
}
函数表达式将一个函数声明赋值给一个变量。
两者有一个明显的区别即是函数声明会前置,而函数表达式不行。
什么是变量的声明前置?什么是函数的声明前置
变量声明前置
变量的声明(注意不包含变量初始化)会被提升(置顶)到声明所在的上下文。也就是说,在变量的作 用域内,不管变量在何处声明,都会被提升到作用域的顶部,但是变量初始化的顺序不变。函数声明前置
函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用
参考资料-变量提升
参考资料-函数声明前置
对于arguments 的理解
arguments是函数自带的一个参数,他可以调用函数的参数值
例如:
function message( name, age , tel){
alert(arguments[0]);
}
arguments对象类似于数组,通过[0],[1],[2]等,来调用函数内第一个,第二个,第三个参数。
同时还有一个arguments.length 属性可以知道有多少个参数传递给了函数。
在Javascript中函数的重载怎样实现
同种函数拥有唯一的函数名与形参,相同名字的函数,参数个数不同或者顺序不同都被认为是不同的函数,称为函数重载。
JavaScript并没有函数重载这个特性,因为只要函数名相同JS就认为是同一个函数。后面出现的函数后覆盖前面出现的函数。
但是我们可以通过判断传入参数的数量和类型,来进行重载的模仿。
function name( ) {
if (arguments.length==1){
console.log(arguments[0]+10);
}else if(arguments.length==2){
console.log(arguments[0]+arguments[1]);
}
}
立即执行函数表达式是什么?有什么作用?
- 立即执行函数:
用括号将函数包裹起来,同时后面再加一个括号
(function example( ) {
console.log(a)
})( )
因为javascript语言中没有块级作用域,可以用次将函数包裹,避免变量的相互影响,减少错误。
什么是函数的作用域链
函数的作用域链是指根据代码的结构,形成一个单独的作用域,而作用域之间又有关联,形成一个链状的结构,构成作用域。