js中作用域

    一、全局作用域:1、直接编写在 script 标签之中的JS代码,  
                      2、直接编写在外部的js文件中的代码
                      生命周期:在页面打开时创建,页面关闭时销毁
                      全局变量:在任何作用域内都是有效的
                      全局变量都是window对象下的属性。window对象下的所有的属性和方法都可以省略window
        二、局部作用域:只有函数才能产生局部作用域
                      声明周期:调用的时候开始创建,函数调用完成后,生命周期结束
                      局部变量:只在当前的作用域内有效

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>作用域</title>
    <script src="./b.js"></script>
</head>

<body>

</body>
<script>
    /* 
       如何判断何时局部作用域:只需判断变量在全局中获取不到
    */
    var a = 100;
    console.log(window.a);
    console.log(str);
    console.log(a);
    // 1、
    while (true) {
        var num1 = 1;
        break;
    }
    console.log(num1);
    console.log(window.num1);

    // 2、
    if (1) {
        var num2 = 10;
    }
    console.log(num2);
    // 3、
    for (var i = 0; i < 1; i++) {
        var num3 = 100;
    }
    console.log(num3);
    // 4、
    var key = 1;
    switch (key) {
        case 1:
            var num4 = 1000;
            break;

        default:
            break;
    }
    console.log(num4);
    // 5、
    do {
        var num5 = 10000;
        key++;
    }
    while (key <= 2);
    console.log(num5);
    // 6、
    function fn1() {
        var num6 = 0.1;
        console.log(num6);
    }
    fn1();
    // console.log(num6);
    var x1 = 2.36;
    console.log(window);
    console.log(window.x1);

    function fn2() {
        console.log(x1);
        // console.log(num6);
    }
    fn2()
    /*
      三、隐式的全局变量(重点,考试要考!)
        1、函数中没有用var声明的变量
        2、函数中没有用var声明的多个变量,用分号隔开的
        3、函数中没有用var声明的多个变量,用赋值号链接的
    */

    function func1() {
        var x = 1,
            y = 2,
            z = 3; //x,y,z都是局部变量
        var m = 1;
        n = 2;
        q = 3; //n,q是隐式全局变量
        var e = f = g = 1; //f,g是隐式全局变量
    }
    func1();
    console.log(x);
    console.log(count); //-3

    str1 = "嘿嘿";
    console.log(str1);
    // console.log(x);
    // console.log(y);
    // console.log(z);
    // console.log(m);
    console.log(n);
    console.log(q);
    // console.log(e);
    console.log(f);
    console.log(g);

    /*
      四、作用域链的查找规则:
          先从当前的作用域内查找,如果有就返回
          如果没有,再上一级作用域内查找,依次向上查找,
          如果还没有,从全局作用域内查找。
          全局中还没有就报错
    */
    // var number1 = 0.111;
    function f1() {
        // var number1 = 0.222;
        function fn2() {
            // var number1 = 0.333;
            console.log(number1);
        }
        fn2()
    }
    f1();
</script>

</html>

猜你喜欢

转载自blog.csdn.net/weixin_47619284/article/details/126787679