函数声明和函数表达式有什么区别?
传送门(mdn推荐的文章)
函数声明:function functionName(){}
函数表达式:var fn = function(){}
函数声明会提前,函数表达式可以省略标识符(函数名)。
函数声明时就已经完成函数的构建了,而函数表达式是在程序运行到此处才完成构建(函数表达式的变量声明 完之后值为undefined),所以在重名的情况下,表达式会替代声明
示例
另外mdn里还有一种条件创造函数(Conditionally created functions),我目前还不清楚什么时候应该使用这种方式来定义函数。希望各位大牛指教。
什么是函数的声明前置?什么是变量的声明前置?
所谓的变量声明前置就是在一个作用域块中,所有的变量都被放在块的开始出声明。
和变量声明前置一样,执行代码之前会先读取函数声明,只要函数在代码中进行了声明,无论它在哪个位置上进行声明,js引擎都会将它的声明放在范围作用域的顶部。
arguments 是什么
arguments是函数的形参,它是一个类数组对象。
函数重载怎样实现
- JS中不存在函数的“重载”,同名函数会被覆盖,但是JS却可以利用函数体针对不同的参数调用相应的逻辑来达到其他语言的函数重载的效果。
- 其他语言的函数重载样例:
function int translateNumber(parseInt(a),parseInt(b)){
statement;
}
function float translateNumber(parseFloat(a),parseFloat(b)){
statement;
}
- JS伪"重载"样例:
function getInfOfPeople(name,age,sex) {
if(name){
console.log(name);
}
if(age){
console.log(age);
}
if(sex){
console.log(sex);
}
}
getInfOfPeople(2,3);
getInfOfPeople(2,3,1);
立即执行函数表达式是什么?有什么作用
函数构建后直接就可以运行的函数叫做立即执行函数(传送门)
作用:从传送门中的文章来看,作用就是利用闭包来形成私有变量。