JavaScript高级

本文详细介绍了JavaScript的基础特性,包括const与let声明变量的区别、匿名函数、变量提升和函数提升、闭包、箭头函数等内容。阐述了不同变量声明方式在作用域、重复声明等方面的差异,以及箭头函数的特点和使用注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、const与let:

        const声明的变量必须直接初始化且不允许二次赋值;

             

        let关键字和var一样,let也用于声明变量;

        var声明的变量和let声明的变量有何不同:

            a、全局作用域:let声明的变量不会作为全局对象window的属性,而var声明的变量则可以

                  

            b、函数作用域:和var一样,都用于声明变量,此时两者没有区别:

                但是有些window里面已有的变量在使用console.log(window.变量名)时,会有输出值

                  

            c、语句块作用域:let声明的变量只能用于语句块作用域内,而var声明的变量还可以在语句块作用域外使用

                  

            d、重复声明:let不能重复声明变量(与Java语言中相似),var则可以

                 

2、匿名函数:

        没有函数名的函数称为匿名函数;其格式为:()();

            比如: (function (x,y){console.log(x+y);})(1,1)

            第二个小括号是向函数中传递的值;

3、变量提升和函数提升:

    变量提升:

        比如:var name='Tom';

                  (function(){

                       console.log(name);//输出undefined,为什么?

                       var name='Tim';

                  })();

        其实在浏览器中会进行变量提升,如下:

                  var name='Tom';

                  (function(){

                        var name;

                       console.log(name);

                       name='Tim';

                 })();

    函数提升:

                print();//方法定义在下面,但为什么可以这样被调用呢?

                function print(){

                     console.log("Tom");

               };

        其实在浏览器中会进行函数提升,如下:

                function print(){

                     console.log("Tom");

               };

               print();           

        JavaScript中,函数定义式声明的函数会被提升到最顶部执行,变量式声明的函数则不会,如下代码:

                 print();//程序运行,该行代码报错:"Uncaught TypeError: undefined is not a function"

                 var print = function (){

                      console.log("Tom");

                 };

4、闭包:

        javascript中,闭包指定义在一个函数内的函数,该函数可以使用其所在函数中定义的变量(内函数可以使用外函数的变量),如下:

                 function add(x) {

                      return function(y) {

                           return x + y;

                      };//该匿名函数既是闭包,可以使用外函数中的变量x

                 }

                 var result = add(4)(2);//x=4,y=2

                 console.log(result);

5、箭头函数:

        举例说明:

            传统函数:

                  function add(a,b){

                       return a+b;

                  }

           箭头函数:

                  var add = (a,b)=>{

                       return a+b;

                 }

    箭头函数注意事项:

        a、如果函数体只有一行代码,则函数大括号可以省略,如果该行代码用于返回结果,return必须忽略

             注意:一个=,一个=>       如下例子:

                function print(){

                     console.log("Tom");

                }

                var print = ()=>console.log("Tom");

        b、箭头函数是匿名函数,不能作为构造函数,不能使用new,(匿名函数,无法new对象)如下例子:

                let Student = () => {

                      console.log('箭头函数不能作为构造函数');

                }

                let student = new Student();//会报错

        c、箭头函数没有原型属性,如下例子:

                var add = (a, b) => a + b;

                      console.log(add.prototype); // 这里得到的结果是undefined,其中prototype可以为对象添加属性和方法,(在JavaScript中,函数也是对象)。

                function print() {

                      console.log("Tom");

                 }

                 console.log(print.prototype);//输出个object

        d、箭头函数不绑定arguments,而是使用...接收不定参数,如下例子:(下面代码中不一定非要是param,在这里只是把它看作一个变量)

                  传统函数中:

                       function print(param) {

                             console.log(arguments);

                      }

                      print(1,2,3);

                 箭头函数中:(不能用arguments,使用...接收不定参数)

                      let print=(...param)=>console.log(param);

                      print(1,2,3);

        e、箭头函数中this永远指向其上下文中的this,默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象,普通函数中this指向调用它的对象,如下代码:

                var student = {

                     age: 10,

                     a:function(){

                         console.log(this);                   //Object { age: 10, a: a(), b: b(), c: c() }

                         console.log(this.age);            //10

                     }

                     b: () => {
                         console.log(this);                  // Window        
                         console.log(this.age);            // undefined
                    },

                     c: function() {

                         return() => {

                               console.log(this);              //Object { age: 10, a: a(), b: b(), c: c() }

                               console.log(this.age);        //10

                         }

                     }

                }

                student.a();

                student.b();

                student.b();

            代码中,//后面是执行后的结果;b()是箭头函数定义它的时候,外部环境是window,所以b()中的this指向window,而不是调用它的对象 ;在c()内部有个箭头函数,指向外部函数的this,在这里a()和c()中this是相同的,即外部环境a()和c()一样,所以得到的结果和a()函数得到的结果一样。

7、箭头函数不能当做Generator函数,不能使用yield关键字;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值