函数与作用域

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

函数声明:函数声明必须有函数名,函数可以在任意地方调用。
函数表达式:前后两个函数的名字可以相同也可以不相同, function 后面的这个名字是可以省略的 , function 后面的这个名字只能再函数内部使用 ,函数调用只有在函数表达式声明后调用。

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

当执行流进入一个作用域后,作用域里面的函数和变量会被提升到作用域顶部预先解析,此时变量被赋值为undefined,变量真正的值不会提升,函数则是整体被提升,确保所有代码执行之前已经全部被解析,无论在哪里调用此函数都会执行。如下所示

            a();    // a
            console.log(b);    // undefined
            function a(){
                console.log("a");
            }
            var b="b";
            console.log(b);    // b

三、arguments 是什么?

arguments 是一个对应于传递给函数的参数的类数组对象。arguments对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。如下代码:

            function a(){
                console.log("名字:"+arguments[0]);    //名字:小明
                console.log("年龄:"+arguments[1]);    //年龄:22
                console.log("性别:"+arguments[2]);    //性别:男
                console.log("传进的参数有几个:"+arguments.length+"个");    //3个
            }
            function b(name,age,sex,achievement){
                console.log("name:"+name);    //name:小红
                console.log("age:"+age);    //age:21
                console.log("sex:"+sex);      //sex:女
                console.log("achievement"+achievement) //achievement:A+
                console.log("传进的参数有几个:"+arguments.length+"个");    //4个
                arguments[0]="小青"
                console.log("名字被改为"+name+"了");    //名字被改为小青   
            }                                                    
            a("小明","22","男");
            b("小红","21","女","A+")

四、函数的"重载"怎样实现

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');

第一次调用时,没有sex参数,函数内的sex参数被赋值为undefined,if的判断里面的undefined,被转换为false,里面的代码不会被执行,所以实现了"重载"。

五、立即执行函数表达式是什么?有什么作用?

  1. 立即执行函数表达式是什么
    定义一个函数后,立即调用这个匿名函数;它还有多种写法:
(function(){alert('立即执行函数')} ()) // 用括号把整个表达式包起来
(function(){alert('立即执行函数')}) () //用括号把函数包起来
!function(){alert('立即执行函数')}() // 求反
+function(){alert('立即执行函数')}()
。。。等等
  1. 作用:
    ① 是不必为函数命名,避免了污染全局变量;
    ② IIFE内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 函数声明和函数表达式有什么区别 函数声明语法:function functionName(arg0,arg1,ar...
    _Dot912阅读 3,709评论 0 3
  • 1.函数声明和函数表达式有什么区别 函数就是一段可以反复调用的代码块。函数还能接受输入的参数,不同的参数会返回不同...
    徐国军_plus阅读 3,385评论 0 0
  • 函数声明和函数表达式有什么区别 JavaScript 中需要创建函数的话,有两种方法:函数声明、函数表达式,各自写...
    萧雪圣阅读 4,531评论 2 2
  • 1.函数声明和函数表达式有什么区别 函数声明 代码执行时函数声明会被提升到最前执行,所以函数的调用与函数声明的顺序...
    Feiyu_有猫病阅读 3,081评论 0 0
  • 1.函数声明和函数表达式有什么区别 function命令声明的代码区块,就是一个函数。function命令后面是函...
    饥人谷_Leon阅读 2,435评论 0 0

友情链接更多精彩内容