let和const

用来定义变量或常量

var username = 'Alex';
let age = 18;
const sex = 'male';
console.log(username,age,sex);

let和const区别

var、let定义变量,初始化后还可重新赋值
const 定义常量,初始化后不能重新赋值

const 定义常量

适用于初始化后不希望重新赋值

例如:性别
若重新赋值则会报错,语法上杜绝问题的发生

定义和赋值必须同时

错误

const sex;
sex='male';

正确

const sex='male'

复杂数据类型可修改值

复杂/引用数据类型不是以重新赋值方式修改值
而是找到对象的属性,改变属性值

const person = {
     username: 'Alex'
 };
 person.username = 'ZhangSan';

基本数据类型不可修改值

基本数据类型是以重新赋值方式修改值

const sex = 'male';
sex = 'female';//报错

let和const特点

不允许重复定义

重复声明:已经存在的变量或常量,又声明了一遍;
var允许重复声明
错误示例1

let a = 1;
let a = 2;

错误示例2

function func(a) {
   let a = 1;
}
func();

不存在变量提升

var存在变量提升

console.log(a);//报错:a未初始化
let a = 1;

有块级作用域

for (let i = 0; i < 3; i++) {
   console.log(i); //0 1 2
}
console.log(i);//报错:i未定义

var 无块级作用域,定义的变量存在于全局中

for (var i = 0; i < 3; i++) {
    console.log(i); //0 1 2
}
console.log(i);//3

不会自动变成window对象的属性和方法

let age = 18;
const add = function () { }
console.log(window.age === age);//false
console.log(window.add === add);//false

全局作用域中, var声明的变量会自动变成window对象的属性,
声明的函数会自动变成window对象的方法;

var age = 18;
function add() { }
console.log(window.age === age);//ture
console.log(window.add === add);//ture

暂时性死区

声明的变量/常量会‘绑定’该区域,使变量或常量不受外部作用域影响

let a = 1;
function func() {
   console.log(a);//报错:未初始化a;
   //不会去函数外的全局中找变量a
   let a = 2
}
func();

块级作用域常见类型

一般来讲,存在{},比如:
1){}
2)循环语句:for(){},while(){},do{}while()
3)条件语句:if(){},switch(){}
特别地,
1)函数:function(){}构成函数作用域
2)对象:const person={}不构成任何作用域,其中方法构成函数作用域
立即执行函数(function 函数名{})() 可模拟模拟块级作用域

作用域链-查找变量的顺序

内层作用域-外层作用域-…-全局作用域

function func() {
   for (let i = 0; i < 3; i++) {
       console.log(i);//0 1 2
   }
}
func();
console.log(i);// 报错:i未定义

应用-块级作用域

问题:点击0,1,2这3个按钮后输出都是3,如何使其对应呢

<button class="btn">0</button>
<button class="btn">1</button>
<button class="btn">2</button>
<script>
    var btns = document.getElementsByClassName('btn');
    for (var i = 0; i < btns.length; i++) {
        btns[i].addEventListener('click', function () {
            console.log(i);
        }, false);
    }
</script>

解析:
1)var声明的变量是全局的,代码按顺序执行后i = 3
2)点击按钮触发事件,调用函数,形成一个个函数作用域
但函数作用域其中都没有定义i,故输出的i是全局的值

方法一:IIFE模拟块级作用域

var btns = document.getElementsByClassName('btn');
for (var i = 0; i < btns.length; i++) {
    (function (index) {
        btns[index].addEventListener('click', function () {
            console.log(index);
        }, false);
    })(i);
}

原理:
1)立即执行函数IIFE
触发事件后,调用第一层函数(点击事件函数),形成了第一层函数作用域;
012通过i分别传入参数index,调用第二层函数IIFE,形成第二层函数作用域
2)函数作用域链(闭包)
console.log(index);从当前层开始,逐层向上寻找index,在IIFE函数作用域找到

方法二:let和const有块级作用域

let btns = document.getElementsByClassName('btn');
for (let i = 0; i < btns.length; i++) {
    btns[i].addEventListener('click', function () {
        console.log(i);
    }, false);
}

原理:
1)let和const有块级作用域
for循环对应形成3个块级作用域,对应i的值分别为0,1,2
2)函数作用域链
触发事件,调用第一层函数(点击事件函数),形成了第一层函数作用域;
console.log(i);从当前层开始,逐层向上寻找i,在for循环的块级作用域找到了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值