函数声明和函数表达式有什么区别
函数声明:使用function关键字可以声明一个函数,声明不用放在函数调用的前面。
//函数声明
function sayHello(){
console.log('hello')
}
//函数调用
sayHello()
函数表达式:
声明必须放到调用的前面。这相当于把函数看成一个值,把值赋给变量sayHello。所以必须先声明变量,后使用变量。
var sayHello = function(){
console.log('hello');
}
sayHello()
什么是变量的声明前置?什么是函数的声明前置
在一个作用域下,var 声明的变量和function 声明的函数会前置
- 变量声明前置:
console.log(a); //undefined
var a = 3;
console.log(a); //3
解析:
var a; 这里上例中的变量声明前置为 var a;这时还未赋值,所以下面结果为undefined
console.log(a);//undefined
a=3; 这里把3赋给变量a所以下面结果为3
console.log(a);//3
- 函数声明前置
sayHello();
function sayHello(){
console.log('hello');
}
解析:
function sayHello(){
console.log('hello');
}
sayHello();
arguments 是什么
arguments其实是函数的一个内置参数的数组对象,通过arguments[1、2、3]等...我门可以获取到相应的传入参数.
函数的"重载"怎样实现
重载是函数具有相同的名字,但是由于传入的参数不同,执行不同操作。在js中没有类似其他语言的重载,因为同名函数会被覆盖。但是js可以通过在函数内部对传入参数进行判断来达到重载的目的。
function printPeopleInfo(name, age, sex){
if(name){
console.log(name);
}
if(age){
console.log(age);
}
if(sex){
console.log(sex);
}
}
printPeopleInfo('Byron', 26);
printPeopleInfo('Byron', 26, 'male');
立即执行函数表达式是什么?有什么作用
(function(){
var a = 1;
})()
console.log(a); //undefined
立即执行函数就是当我们在定义了函数之后需要立即执行的函数,这样可以做到隔离作用域,避免变量污染全局。
求n!,用递归来实现
function factor(n){
if(n === 1) {
return 1
}
return n * factor(n-1)
}
factor(5)
以下代码输出什么?
function getInfo(name, age, sex){
console.log('name:',name);
console.log('age:', age);
console.log('sex:', sex);
console.log(arguments);
arguments[0] = 'valley';
console.log('name', name);
}
getInfo('饥人谷', 2, '男');
getInfo('小谷', 3);
getInfo('男');
getInfo('饥人谷', 2, '男')
name:饥人谷; age:2; sex:男; ['饥人谷','2','男']; name:valley
getInfo('小谷', 3)
name:小谷; age:3; undefined; ['小谷','3']; name:valley
getInfo('男')
undefined; undefined; sex:男; ['男']; name:valley
写一个函数,返回参数的平方和?
function sumOfSquare() {
var result = 0;
for(var i=0; i<arguments.length; i++){
result = result + arguments[i]*arguments[i];
}
return result;
}
console.log(sumOfSquare(2,3,4));
如下代码的输出?为什么
console.log(a);
var a = 1;
console.log(b);
解析:
var a; //变量声明提升;
console.log(a); // 变量提升之后a还未赋值,结果未undefined
a=1;
console.log(b); //没有声明过b,所以这里会报错
如下代码的输出?为什么
sayName('world');
sayAge(10);
function sayName(name){
console.log('hello ', name);
}
var sayAge = function(age){
console.log(age);
};
解析:
function sayName(name){
console.log('hello ', name);
} ; //函数提升
sayName('world'); // 结果为hello world
sayAge(10); //下面为函数表达式,所以结果为报错
var sayAge = function(age){
console.log(age);
};