关于作用域的小案例

记录实验,方便复习;

    /* 作用域 链*/
    /* 这是向上找,往父级选择输出项 */
    let color = "aqua";   //第一个定义
    function am(){   // 第一个函数结构
        let color = "green";  //第二个定义
        function ak(){   //第二个函数结构
            console.log(color);   //输出定义内容
            //这里的作用域链是先寻找父级,找不到输出项
            //那么它就会继续往外寻找该输出项,直到找到并返回
            //这个作用域就会停止运行了
        }
        ak();   //第二个 调用接口
    }
    am();  //第一个调用接口


    /* 块级作用域 */
    function al(){
        let aa = "hello";

        console.log(aa);
    }
    al();

    /* 变量和函数预解析 */
    console.log(myName);  
    //这是预解析的编写,会返回 undefined
        //引擎会先把 声明变量的定义先放在顶部,这就是预解析
    var myName = "小七";  //全局声明变量
    console.log(myName);   //这是正常逻辑的编写


    /* 函数预解析 */

    sun(); //函数调用  预解析的编写模式
    function sun(){  //函数结构
        console.log("这是一个函数"); //输出
    }
    sun();    //这是正常编写模式

    /* 函数表达式 */
    // fun();  无法在函数体前面进行调用
    var fun = function (){ //这是赋值的函数体
        console.log("我是小七"); 
    }  //定义的函数表达,所以它属于局部
    fun();  //在这里调用函数体

    //以下是面试题:
    /* 案例 */
    //这里等于调用(打印)了函数体
    console.log(func);  //undefined
    var func = 123;
    console.log(func);  //123
    function func(){//没有调用
        console.log("hello world");//hw
    }
    //自己猜的返回数据是
    //真实是,函数体 ,123

    /* 案例2 */
    function func1(numg){

        console.log(numg);
        
        var numg = 456;  //全局声明

        console.log(numg);
    }
    var numg = 789;  //这里赋值了 参数会作为函数的变量
    func1(numg);  //调用
    //自己的答案 456 789
    //正确答案   789 456

    /* 案例3 */
    var numm = 123;  //唯一可执行声明变量
    function kl(){
        console.log(numm);  //123

    }
    function ko(){
        var numm = 456;  //违法
        kl();  //这里第一个函数的调用无法执行
    }
    ko();  //可执行函数体
    console.log(numm);  //123
    //我的答案  456 123
    //真是答案  123 123

    /* 案例4 */
    function fnl(){
        var a = b = c = 3; // 它们是全局,相同变量

        console.log(a); //3
        console.log(b); //3
        console.log(c); //3
    }
    fnl();

    console.log(c);  //3
    console.log(b);  //3
    console.log(a);  //外部无法打印,报错(a 是局部变量?)

    //自己的答案 报错 3 3 
    //真实的答案 3 3 3 报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值