函数

作者: ahong_吴 | 来源:发表于2016-09-16 15:24 被阅读22次

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

函数声明:

function functionName(){
  statement;
}

函数表达式:

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

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

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

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

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

Paste_Image.png

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

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.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```

相关文章

  • Excel(三)

    AND函数 OR函数 NOT函数 IF函数 频率分析函数FREQUENCY

  • if、else if、for、while、repeat函数

    ①if函数 ②else if函数 ③for函数 ④while函数 ⑤repeat函数

  • strsplit、mapply、paste、match函数

    strsplit函数 mapply函数 strsplit函数 mapply函数 paste函数 match函数 第...

  • Oracle中常用函数(SQL)

    Oracle函授有以下几个分类:数字函数、字符函数、日期函数、转换函数、集合函数、分析函数 数字函数: 字符函数:...

  • MySQL函数

    字符函数 数字运算函数 比较运算符和函数 日期时间函数 信息函数 聚合函数 加密函数 流程函数

  • BI-SQL丨AND & OR & IN

    AND函数 & OR函数 & IN函数 AND函数、OR函数和IN函数都可以理解是WHERE函数的补充,当然也可以...

  • Python之函数

    课程大纲 函数定义 函数的参数 函数的返回值 高阶函数 函数作用域 递归函数 匿名函数 内置函数 函数式编程 将函...

  • 函数基本知识

    函数 函数的定义: def 函数名() 函数的调用:函数名() #不能将函数调用放在函数定义上方 函数的文档注...

  • 积分表——不定期更新

    基本初等函数包括: 常函数: 幂函数 指数函数 对数函数 三角函数 反三角函数 I、反函数Ⅱ、复合函数:初等函数(...

  • MySQL基本使用

    函数 常用函数 数学函数 字符串函数 日期函数

网友评论

      本文标题:函数

      本文链接:https://www.haomeiwen.com/subject/smjbettx.html