JS_09

一、JS基础语法进阶

1.1、三元运算符

概述:三元运算符是由三部分组成,使用语法如下:
        A?B:C

三元运算符A部分:需要一个布尔值(其他类型的数字需要隐式转换为布尔值)

如果A部分为布尔值真,则返回结果为B,如果布尔值为假,则返回结果C

B与C部分:可以使任意类型数值或者是一些表达式

<script>
    console.log(true?1:2);//1
    console.log(""?1+1:6);//6
</script>

 注意:三元运算符经常给变量进行赋值

<script>
    var age = true?16:NaN;
    console.log(age);//16
</script>

 1.2、类数组对象——arguments

概述:函数体中拥有一个引用类型数据arguments。类数组存在的意义:在函数没有形参的情况下,在函数体中可以获取到传递给函数的实参

【类数组对象:类似于不是数组,因为只能使用数组的length属性,不能使用数组的方法】 

<script>
    //函数的函数体中才有类数组对象arguments
    function fun(){
        //类数组对象是引用类型的数据
        console.log(typeof arguments);
        //在没有给函数写形参的情况下可以接收传递进来的实参
        console.log(arguments);
        var sum = 0;
        for(var i = 0 ; i < arguments.length ; i++){
            sum += arguments[i];
        }
        console.log(sum);
    }
    fun(1,2,3,4,5,6,7,8,9,10);
</script>

 1.3、闭包***

概述:闭包【可以访问其他作用域中的变量的函数称为闭包】

 

 

<script>
    //定义一个全局变量100
    var num = 100;
    //声明一个函数
    function fun(){
        num++;//此时修改的是全局变量num的值
        console.log(num);
    }
    //调用函数
    fun();
    fun();
</script>

 

 当函数fun第一次调用的时候:在函数作用域中没有变量num,因此会沿着作用域链向上(全局)查询。当函数fun第一次执行的时候将全局变量num由100变为101了,当函数fun第二次执行的时候,将全局变量num由101变为102。

1.3.1、闭包经典习题一

 

 

<script>
    //声明第一个函数【外层函数】
    function outer(x){
    //声明第二个函数【内层函数】
    function inner(y){
        console.log(x + y );//300
    }
    //调用内层函数
    inner(200);
    }
    //调用外层函数
    outer(100);
</script>

 在这个例子中,inner函数是闭包。

1.3.2、闭包经典习题二

<script>
    function outer(){
        var a = 100;
        function inner(){
            a += 10;
            console.log(a);
        }
        //返回值是inner函数的声明部分
        return inner;
    }
    var result = outer();
    result();
    result();
    var result1 = outer();
    result1();
    result1();
    //引用类型的数据比较是否相等时看的是地址是否相等。
    console.log(result ==result1);
</script>

 

 

当outer第一次执行的时候,声明了一个局部变量a=100,以及声明了第一个inner函数并且返回inner的声明部分

当result执行的时候,自身作用域中没有变量a,因此沿着作用域链向上查询【outer】,而且每一次调用都把原来作用域中的a加10

当outer第二次执行的时候,声明了同名变量a=100以及第二个函数inner的声明部分,然后再次返回并调用,但是这次a的值是从100开始的

上述例子中存在两个闭包。

 

posted @ 2021-08-21 14:58  Viper7  阅读(33)  评论(0)    收藏  举报