关于let以及var的区别

  最近我在看一些文章的时候总是会出现 let 这个关键字,让我很是不解。于是查了一些资料才了解那么一点....

下面直接进入正题,关于let的定义:let 允许把变量的作用域限制在块级域中。与var的区别在于var 声明要么是全局变量或者是局部变量,而无法变为块级的(还是无法理解块级变量)。

直接上代码:

    var list = document.getElementById("list");

   for (var i = 1; i <= 5; i++) {

     var item = document.createElement("LI");

     item.appendChild(document.createTextNode("Item " + i));

     let j = i;

     item.onclick = function (ev) {

      console.log("Item " + j + " is clicked.");

    };

    list.appendChild(item);

    };

结果当声明 j 为let的时候,每次点击一个li,每一个li都有自己的事件,输出结果为:ITem1 is clicked,ITem2 is clicked,ITem3 is clicked,ITem4 is clicked,ITem5 is clicked。

而我再次把let j = i换成 var j = i时候,每点击一次li输出结果为:ITem5 is clicked。因为 var  j = i 是局部变量,5个内部函数都指向了同一个 j ,而 j 最后一次赋值是5。而当用let声明后,

j 变成块级域(也就是花括号中的块,每进入一次花括号就生成了一个块级域),所以 5 个内部函数指向了不同的 j 。

时间: 2024-11-06 05:14:01

关于let以及var的区别的相关文章

【转载】在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别

原文链接:http://www.2cto.com/kf/201204/128406.html[侵删] Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的 Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. var num = 1: 是在当前域中声明变量. 如果在方法中声明,则为局部变量(local var

JavaScript中声明是否有var的区别

本文来论述JavaScript中变量声明有var和没有var的区别,关于JavaScript中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是: (function(){ // ... })(); 在函数内部,有var和没var声明的变量是不一样的.有var声明的是局部变量,没var的,声明的全局变量,所以可以借此向外暴露接口东东. 在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,我们通过ECM

javascript变量声明带var和不带var的区别

javascript变量声明带var和不带var的区别:在javascript中,声明变量可以使用var也可以不用使用var,下面就介绍一下这两者的区别.一.作用域的区别:不使用var声明的变量的作用域是全局性的,无论是否声明在函数的内部.使用var声明的变量的时候,如果是在函数外部声明的那么就是全局性的,在函数内部声明的就是局部变量.代码实例: <script type="text/javascript"> var a; function fun() { var b; c

在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别,== 和 ===的区别

1. 在Javascript中 声明时用"var"与不用"var"的区别 Javascript声明变量时 var a = 111; 和 a = 111; 两种方式一样吗? var a = 11;function test4(){    var a = 22; } test4(); console.log(a); 结果是什么呢? 11 这个好理解, 函数内的var a声明是内部变量,这时结果是第一个a的值. 变动一下如下: var abc = 11;function 

【转】Javascript全局变量var与不var的区别

相信你对全局变量一定不陌生,在函数作用域里用a=1这种形式定义的变量会是一个全局变量,在全局作用域里,用下面3种形式都可以创建对全局可见的命名: 1 <script> 2 var a = 1; 3 b = 2; 4 window.c = 3; 5 </script> 对于b=2这种方式, 它其实和c是一样的,在执行这个赋值语句的时候,会沿着作用域链寻找名字叫做b的变量,一直找到作用域链的顶端还没有找到,于是给window添加一个属性b然后赋值. var与不var有两个区别: 1 v

JavaScript中变量声明有var和没var的区别

本文来论述JavaScript中变量声明有var和没var的区别,关于Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (function(){ ... })(): 在函数内部,有var和没var声明的变量是不一样的.有var声明的是局部变量,没var的,声明的全局变量. 在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,我们通过ECMAScrpit5提供的属性的特性查询方法,来发现之间的区

[js]js中变量带var和不带var的区别

上图已说的很清晰了. 下面代码是赘述 <script> //带var和不带var的区别: // 1.只有带var的才可以预解释,所以在赋值的前操作不会报错. console.log(num); //undefined var num = 100; // 2.不带var的不会进行预解释,赋值前调用会报错, console.log(num2); //Uncaught ReferenceError: num2 is not defined num2 = 200; // 3. 本质区别: // - 1

前端面试题:JS中的let和var的区别

最近很多前端的朋友去面试被问到let和var的区别,其实阮一峰老师的ES6中已经很详细介绍了let的用法和var的区别.我简单总结一下,以便各位以后面试中使用. ES6 新增了let命令,用来声明局部变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效,而且有暂时性死区的约束. 先看个var的常见变量提升的面试题目: 题目1: var a = 99; // 全局变量a f(); // f是函数,虽然定义在调用的后面,但是函数声明会提升到作用域的顶部. console.l

const,var,let区别(转载)

1.const定义的变量不可以修改,而且必须初始化. const b = 2;//正确 // const b;//错误,必须初始化 console.log('函数外const定义b:' + b);//有输出值 // b = 5; // console.log('函数外修改const定义b:' + b);//无法输出 2.var定义的变量可以修改,如果不初始化会输出undefined,不会报错. var a = 1; // var a;//不会报错 console.log('函数外var定义a:'