美文网首页
函数与作用域

函数与作用域

作者: 羌生 | 来源:发表于2017-12-26 22:59 被阅读0次

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

函数声明:函数声明必须有函数名,函数可以在任意地方调用。
函数表达式:前后两个函数的名字可以相同也可以不相同, 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内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。

相关文章

  • 执行上下文、作用域链、this、闭包

    javascript 执行的是词法作用域,即静态作用域。与之相对的是动态作用域。 静态作用域:函数的作用域在函数定...

  • 作用域和作用域链

    作用域和作用域链 作用域 作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在Java...

  • 作用域

    何为作用域 任何编程语言都有作用域的概念,简单来说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可...

  • JavaScript中的作用域和作用域链(一)

    作用域 1.作用域的概念: 变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。 2.全局作用域与...

  • JavaScript静态作用域解析

    静态作用域与动态作用域 因为 JavaScript 采用的是词法作用域,函数的作用域在函数定义的时候就决定了。而与...

  • 词法作用域 - 2023-02-09

    静态作用域与动态作用域 因为 JavaScript 采用的是词法作用域,函数的作用域在函数定义的时候就决定了。而与...

  • JS基础知识(2) -- 作用域和作用域链

    作用域 作用域就是变量与函数的可访问范围 全局作用域 函数作用域 ES6块级作用域 ES5没有块级作用域,ES6有...

  • 作用域链

    一、作用域 定义:作用域就是变量与函数的可访问范围。作用域控制着变量与函数的可见性和生命周期。 1、全局作用域(G...

  • JavaScript作用域学习笔记

    @(JS技巧)[JavaScript, 作用域] JavaScript作用域学习笔记 概念: 作用域就是变量与函数...

  • 我的JS笔记 -- 作用域

    作用域和作用域链概念 作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaSc...

网友评论

      本文标题:函数与作用域

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