一、函数声明和函数表达式有什么区别
函数声明:
function functionName(){
statement;
}
函数表达式:
var printName = function(){
console.log('Byron');
};
区别:在于函数声明前置的不同,函数声明是整个函数前置。函数表达式是是所代表的变量前置。
二、什么是变量的声明前置?什么是函数的声明前置
变量声明前置:把var xxx(变量名称)提升到代码的顶端,但是其赋值不会提升。
函数的声明前置:把函数的位置提升,函数表达式会提升该函数所赋值的变量。
三、arguments 是什么
是函数执行时传递进来的参数。
参数的顺序与命名无关,与传递进来的顺序有关。
function getString(a,b){
console.log(a+b)
console.log(arguments);
}
getString(1,2,"c");
四、函数的重载怎样实现
在JavaScript中没有函数重载的概念,只要函数名是一样的,后面的就会覆盖前面的。
function sum(x){
console.log(x+1);
}
function sum(x){
console.log(x+2);
}
sum(1);//结果为3;后面覆盖前面。
五、立即执行函数表达式是什么?有什么作用
(function example( ){
console.log(a)
})( );
作用:可以让函数在定义后直接调用,在固有的作用域内使用,不会污染全局变量。立即执行函数里面的变量外面是取不到的。
六、什么是函数的作用域链
var A;//全局作用域
function B()
{
var C;//C位于B函数的作用域
function D()
{
var E;//E位于D函数的作用域
alert(A)
}
}
javaScript中所有的量都是存在于某一个作用域中,最大的作用域为全局作用域,任何子作用域都能引用全局作用域中的变量。还有局部作用域,它存在于函数内部,在那个函数的外部无法引用它。
本作用域找不到的变量,就会往上父作用域去寻找,如果仍旧找不到,就会往更上层寻找,直至到windom环境,这就形成了链。
代码
1.以下代码输出什么?
Paste_Image.png2.写一个函数,返回参数的平方和?
function sumOfSquares(){
var sum = 0;
for(var i = 0; i<arguments.length; i++){
sum = arguments[i]*arguments[i]+sum;
}
return sum
}
sumOfSquares(2,3,4); // 29
sumOfSquares(1,3); // 10
3.如下代码的输出?为什么
console.log(a);//undefined
var a = 1;
console.log(b);//b is not defined
因为:
var a; //变量声明被前置,而赋值却没有。
console.log(a);
a = 1;
console.log(b);//b连声明都没有
4.如下代码的输出?为什么
sayName('world');
sayAge(10);
function sayName(name){
console.log('hello ', name);
}
var sayAge = function(age){
console.log(age);
};
// hello world
// Uncaught TypeError: sayAge is not a function(…)
// 函数声明使函数被提前;而函数表达式只有函数名所代表的变量提前.
5.如下代码的输出?为什么
function fn(){}
var fn = 3;
console.log(fn);//3
因为:
var fn ;
function fn(){
}
fn = 3;
console.log(fn);// 3
6.如下代码的输出?为什么
Paste_Image.pngfunction fn(fn2){
var fn2;//变量声明提升
function fn2(){
console.log('fnnn2');
}//函数声明提升
console.log(fn2);
fn2 = 3;
console.log(fn2);
console.log(fn);
}
fn(10);
7.如下代码的输出?为什么
var fn; //先声明变量fn
function fn(fn){
console.log(fn);
} //再声明函数,函数的声明会覆盖变量的声明
fn = 1; //然后给fn赋值为1,会覆盖上面的方法声明,此时fn为数字1
console.log(fn(fn)); //这里是调用函数fn,但是此时fn是数字1,不能当作函数来调用,所以会报错
8.如下代码的输出?为什么
console.log(j);
console.log(i);
for(var i=0; i<10; i++){
var j = 100;
}
console.log(i);//10
console.log(j);//100
9.如下代码的输出?为什么
var i;
var fn;
function fn(){
var i;
function fn2(){
i = 100;
}
console.log(i);//输出undefined,因为i声明了还没有赋值
i = 99;
fn2();//执行后i为100
console.log(i);//输出100
}
fn();
i = 10;
fn = 20;
console.log(i);//输出10
10.如下代码的输出?为什么
var say;
(function say(n){
console.log(n); //参数是10
if (n<3) {return;} 2
say(n-1); //一直-1,知道小于3,也就是到2为止。 9,8,7,6,5,4,3,2
}(10));
say = 0;
console.log(say); // 0 say变量赋值的是0```
网友评论