函数

一、函数声明和函数表达式有什么区别

函数声明:

function functionName(){
  statement;
}

函数表达式:

var printName = function(){
    console.log('Byron');
};

区别:在于函数声明前置的不同,函数声明是整个函数前置。函数表达式是是所代表的变量前置。

二、什么是变量的声明前置?什么是函数的声明前置

变量声明前置:把var xxx(变量名称)提升到代码的顶端,但是其赋值不会提升。
函数的声明前置:把函数的位置提升,函数表达式会提升该函数所赋值的变量。

函数_第1张图片
下载.png

三、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.以下代码输出什么?

函数_第2张图片
Paste_Image.png

2.写一个函数,返回参数的平方和?

function sumOfSquares(){
  var sum = 0;
  for(var i = 0; i

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.如下代码的输出?为什么

函数_第3张图片
Paste_Image.png
function 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```

你可能感兴趣的:(函数)