比较var和let的区别,理解函数作用域与块级作用域

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 比较var和let的区别,理解函数作用域与块级作用域,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

var与 let的区别:

var:函数作用域;存在变量提升;可重复定义;声明的变量会作为window的属性。

let:块级作用域;不存在变量提升(有暂时性死区);不可重复定义;声明的变量不会作为window的属性。

块级作用域:即在{}花括号内的域,由{ }包括,比如if{}块、for(){}块。

函数作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体都是有定义的。

暂时性死区:在代码块中,在声明变量之前,该变量是不可用的。

JS中作用域有:全局作用域、函数作用域,是没有块作用域的。块级作用域是ES6中的。

var是js的,作用域是函数作用域的,let是ES6的,作用域是块级作用域的。
下面看下例子比较:

 <script>
           function test11(){
                console.log('函数内声明前使用var变量',num);//undefined
                var num=23;
 
                // console.log('函数内声明前使用let变量',firstname);//报错:firstname is not defined
                let firstname;
            };
            test11();
            // console.log("函数内声明函数外使用var变量:",num);//报错:num is not defined
            // console.log("函数内声明函数外使用let变量:",firstname);//报错:firstname is not defined
 
            if(true) {
                let c = 3;
                if(true) {
                    console.log('c:',c);
                }
 
                console.log('块内声明前使用var',num);//undefined
                var num=2;
            }
            console.log("块外使用var:",num);//2 (没赋值的话打印undefined)
            console.log("块外使用let:",c);//报错:c is not defined
</script>

通过上述例子可见,var定义的变量是受到函数作用域限制的,不受if{}块作用域的限制。在函数内声明前使用var变量只是打印出undefined,而在函数外使用却报错is not defined。而在if{}块作用域内声明前使用和在块内声明后块外使用,也只是打印出undefined,并不会报错。说明var定义的变量的是否可见是受函数作用域限制的,但不受块作用域的限制。

再看let定义的变量,是受块作用域的限制的。let定义的变量不管是在函数内声明前使用,还是函数内声明后函数外使用,及块内声明块外使用都报错is not defined。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/137428.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!