2.变量修饰符

本文探讨JavaScript中let、var的关键字特性,var的局限性导致的函数作用域问题,并提供两种解决方案:立即函数和块级作用域。同时介绍了const的使用注意事项,建议在ES6开发中优先使用const。
摘要由CSDN通过智能技术生成

变量修饰符

let/var
事实上,var的设计可以看成是JavaScript语言设计上的缺陷,所以提出了新的关键字let,
var的作用域主要在函数中,针对于块级是没有作用域的,比如if/for等,所以在开发中会引起一些问题的

btn: function {
      var btns = document.getElementsByTagName('button')
      for(var i = 0;i<btns.length;i++){
        btns[i].onclick=function {
          alert('点击了 '+i+'个按钮')   //此时输出的都是最后一个按钮的i值,
        }
      }
    }
解决办法 
方法一:使用立即函数,因为函数对于var有作用域 (在ES5 中没有let块级变量时,必须借助function的作用域来解决使用外面变量的问题)
btn: function {
      var btns = document.getElementsByTagName('button')
      for(var i = 0;i<btns.length;i++){
        (function(i){
        btns[i].onclick=function {
          alert('点击了 '+i+'个按钮')
        }
        })(i)
      }
    }

方法二:使用ES6中的块级作用域的变量修饰
btn: function {
      var btns = document.getElementsByTagName('button')
      for(let i = 0;i<btns.length;i++){
        btns[i].onclick=function {
          alert('点击了 '+i+'个按钮')   //此时输出的都是最后一个按钮的i值,
        }
      }
    }

const

注意一: 不可以修改变量值
const a = 10
a = 20  //错误
注意二: 声明变量的时候必须赋初始值
const a;    //错误
注意三: 常量的含义是不能改变  指向对象不能修改,但是可以改变对象内部的属性
const obj={
  name:'why',
  age:12
}
obj.name='han'    //正确 ,可以改变对象的属性
const obj={       //错误  不可以改变指向的对象
age:12,
sex:f
}
建议:在ES6 开发中 优先使用const,只有需要改变某一个标识符的时候才使用let
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值