暂时性死区

暂时性死区

let 存在变量提升,但是与 var 不同的是,var 的变量提升的同时会默认赋值为 undefined. 而 let 仅仅发生了提升而已,并不会赋任何值给变量,在显式赋值之前,任何对变量的读写都会导致 ReferenceError 的报错。若在声明之前使用变量,就会报错。在代码块内,使用 let 命令声明变量之前,该变量都是不可用的。从代码块(block)起始到变量求值(包括赋值)以前的这块区域,称为该变量的暂时性死区。

console.log(a); //报错
let a = 123;

在这里插入图片描述

产生原因

当程序的控制流程在新的作用域进行实例化时,在此作用域中用let/const声明的变量会先在作用域中被创建出来,但因此时还未进行词法绑定,所以是不能被访问的,如果访问就会抛出错误。因此,在这运行流程进入作用域创建变量,到变量可以被访问之间的这一段时间,就称之为暂时死区。

暂时性死区带来的影响

  • let所声明的变量一定要在声明后使用,否则报错
  • let不允许在相同作用域内,重复声明同一个变量
  • typeof 不再是一个百分之百安全的操作

typeof的“死区”陷阱

使用typeof 可以用来检测给定变量的数据类型,也可以使用它来判断值是否被定义。当返回undefined时表示值未定义; 但是在const/let定义的变量在变量声明之前如果使用了typeof就会报错

typeof x; // ReferenceError
let x;

只是用了typeof而没有去定义,也是不会报错的,可以看出只要没有明确规定使用const/let定义之前就是不会出错。

typeof y; // 'undefined'

关于getElementsByClassName()

<div id="one" class="two">
	<span class="three">times</span>
</div>
var ttt=Id.getElementsByClassName("three");
var eee=Id.getElementsByClassName("three")[0];
ttt.onclick=function(){
   console.log("111")
}
eee.onclick=function(){
   console.log("111")
}

ttt的onclik执行不了,eee的onclick可以执行.

原因分析

  • ttt获取的是(没有[0])所有classname为three的节点,类似整个数组,即使它只有一个(此时数组长度为一)
  • 而eee获取的是(有[0]):事件绑定一个对象,eee获取的是对象

HTML点击按钮button跳转页面的几种实现方法

  • location.href=(‘跳转页面的地址’)//在本页面打开
  • window.open(‘跳转页面的地址’) //打开新页面
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值