JavaScript变量声明

2021/3/8 01:02:27Chixm106 阅读0 点赞0 评论

变量声明

var 老的(逐渐淘汰)

let (推荐)

const常量

var存在的问题:

1.允许变量重复声明

2.不限制修改

3.不支持块级作用域 – 函数级

let const 的优点:

1.不允许变量重复声明

2.const可以限制修改

3.支持块级作用域 –{}

块级作用域好处:

1.不容易重名

2.每个代码块都有自己的变量副本(这点对普通的if之类的影响不大,但对循环里影响特别大)

for循环里用var声明

HTML
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <button type="button">aaa</button>
    <button type="button">bbb</button>
    <button type="button">ccc</button>
    <script>
        let aBtn = document.querySelectorAll('button');
        for (var i = 0; i < aBtn.length; i++) {
            aBtn[i].onclick = function() {
                alert(i);
            }
        }
    </script>
    <!-- 
        {
            var i=0;
            aBtn[i].onclick = function() {
                alert(i);  // 3
            };
        }
        {
            var i=1;
            aBtn[i].onclick = function() {
                alert(i);  // 3
            };
        }
        {
            var i=2;
            aBtn[i].onclick = function() {
                alert(i);  // 3
            };
        }
        在这个循环里i 只有一个
        因为var是不带块级作用域的,所以就只有一个副本
        换句话说就是在循环过程中i都是同一个,如果其中一个变了,其他的都会变,跟着受影响
    -->
</body>
</html>

for循环里用let声明

HTML
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <button type="button">aaa</button>
    <button type="button">bbb</button>
    <button type="button">ccc</button>
    <script>
        let aBtn = document.querySelectorAll('button');
        for (let i = 0; i < aBtn.length; i++) {
            aBtn[i].onclick = function() {
                alert(i);
            }
        }
    </script>
    <!-- 
        {
            let i=0;
            aBtn[i].onclick = function() {
                alert(i);  // 0
            };
        }
        {
            let i=1;
            aBtn[i].onclick = function() {
                alert(i);  // 1
            };
        }
        {
            let i=2;
            aBtn[i].onclick = function() {
                alert(i);  // 2
            };
        }
        let就不一样了,它是一个块级作用域,每个代码块都有自己的变量副本。for也是一个代码块,for本身也在这个代码块当中
        在这个循环里i 一共有三个,且这些i都是完全互相不打扰的,任何一个i变了,其他的不会跟着变
    -->
</body>
</html>

变量作用域(scope)

全局

在所有函数之外声明的 – 可以在任何地方使用 (不推荐)

全局变量在任何地方都可以使用,之所以非常危险,是因为任何人都可以修改,也容易重名

JAVASCRIPT
let a=12;
function show(){
    alert(a);
}
show();
console.log(a);

局部

声明在函数内的变量叫做‘局部变量’ – 只能在函数内部使用

JAVASCRIPT
function show(){
    let a=12;
    
    alert(a);
};
show();
//报错
console.log(a);
// Uncaught ReferenceError: a is not defined

块级

if{}``for{}``function{}…都是块级作用域

类似局部作用域,只不过在一定程度上分的更细了

评论区

还没有评论,写下第一句吧