首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【ES基础】let作用

你将会学到以下内容: let基本介绍 作用介绍 作用 全局作用和函数作用 块级作用 var和let的区别 重复定义变量的问题 提升概念的问题 let介绍 ES6引入了let,用let声明变量,.../依次输出1到9 } console.log(i);//10 块级作用 幸好es6引入了let,避免了有var声明变量的一些问题,让变量和函数不仅可以属于所处的作用,也可以属于某个代码块(通常是{......}内部),有一点需要强调,在块级作用定义的变量,块级作用域外是无法访问的,如下段代码所示: let a = 12; // 全局作用,可以访问 function myFunction() {...如图所示变量寻找路径: 块级作用.png var和let的比较 对比项 let var 声明变量 √ √ 可以被释放 √ √ 可以被提升 √ 重复定义检查 √ 可被用于块状作用 √ 重复定义变量问题...SyntaxError if(true) { let c = 4; let c = 5; // SyntaxError } } myFunction(); 如果你在嵌套作用里进行重新定义变量,

77480
您找到你想要的搜索结果了吗?
是的
没有找到

JS作用作用

JS中的作用就是在一定的空间范围内对数据进行读写操作。 在JS中一个变量的作用(scope)是程序中定义这个变量的区域。 变量有全局变量和局部变量两种。...下面就要借助JS作用链来更好的理解作用了。 在此之前,先要明确个概念,即执行环境和作用是两个完全不同的概念。 函数的每次调用都有与之紧密相关的作用和执行环境。...搜索过程始终从作用链的前端开始,然后逐级地向后(全局执行环境)回溯,直到找到标识符为止。 此外还要讲下JS作用域中的块级作用JS中是没有块级作用这个概念的。 什么是块级作用呢?...但JS由于没有块级作用,所以在块外仍旧可以访问。...JS并不支持块级作用,它只支持函数作用,而且在一个函数中的任何位置定义的变量在该函数中的任何地方都是可见的。 那么JS又该怎么拥有块级作用呢?

4.1K30

JS基础——作用作用

作用 [[scope]],函数定义时自动生成的一个隐式属性,是用来存储函数作用链 Scope Chain的容器。作用链是用来存储函数执行上下文 AO和全局执行上下文 GO的容器。...函数被定义时,系统会为函数生成[[scope]],[[scope]]中保存该函数的作用链,并从该作用链的起始位置开始存储当前环境的作用链。...函数被定义后&将要执行前会生成函数本身的AO,并将其插入作用链的起始位置。...,并将GO插入到作用链的起始位置。...函数a被执行时,此时函数b也被定义,函数b的[[scope]]也在此时生成,其中存储函数b的作用链,并将当前环境的作用链插入函数b作用链的起始位置,即函数a的AO和GO。

3.5K10

JS进阶:作用作用

ES6 之前 JavaScript 没有块级作用,只有全局作用和函数作用。ES6的到来,为我们提供了‘块级作用’,可通过新增命令let和const来体现。...全局作用有个弊端:如果我们写了很多行 JS 代码,变量定义都没有用函数包括,那么它们就全部都在全局作用域中。这样就会 污染全局命名空间, 容易引起命名冲突。...因为放在里面的所有变量,都不会被外泄和暴露,不会污染到外面,不会对其他的库或者 JS 脚本造成影响。这是函数作用的一个体现。...因为 let 不能在同一作用内重复声明一个已有标识符,此处的 let 声明就会抛出错误。但如果在嵌套的作用内使用 let 声明一个同名的新变量,则不会抛出错误。...如果使用let,声明的变量仅在块级作用内有效,最后输出的是 6。

2.5K20

了解 JS 作用作用

JS中使用的是词法作用(lexical scope) 不在任何函数内声明的变量(函数内省略var的也算全局)称作全局变量(global scope) 在函数内声明的变量具有函数作用(function...,就是说函数是一个作用的基本单位,js不像c/c++那样具有块级作用 比如 if  for 等 function test(){ for(var i=0;i<10;i++){ if(i=...JS中的声明提前 js中的函数作用是指在函数内声明的所有变量在函数体内始终是可见的。...引入一大段话来解释: 每一段js代码(全局代码或函数)都有一个与之关联的作用链(scope chain)。 这个作用链是一个对象列表或者链表,这组对象定义了这段代码中“作用域中”的变量。...作用链举例: 在js最顶层代码中(也就是不包括任何函数定义内的代码),作用链由一个全局对象组成。

2K10

js作用详解

atest其实是一个window对象下的方法对象 var 局部变量作用 var 声明一个对象,只作用当前作用以下。...变量作用覆盖问题 通过var 关键字我们知道,当声明一个变量时,该变量可以被当前作用,以及下层作用访问 当下层作用存在同名变量时,下层变量将覆盖上层变量:     var a=...同时,在子作用声明的方法,只能在当前作用或者下层作用调用 闭包函数,闭包作用 闭包函数,又称匿名函数,例如:     (function () {         var a...在闭包函数中声明的变量,只能在闭包函数内的作用,以及下层作用使用,可通过return 对象中,通过return对象中声明的方法进行返回,使得上级作用能成功访问到闭包作用的变量 return作用变量访问情况...2:js作用是往下通用的,下层作用可访问上层作用的变量,并可修改值 3:js下层作用变量和上层同名冲突时,下层作用将覆盖上层变量,但上层作用的访问不受影响 4:不适用var方法定义的变量,

2.4K10

原生JS | 作用

HTML5学堂-码匠:作用那些必须掌握的知识,还有大量作用案例练习与分析,快快进来! 作用的基础知识 在JavaScript中,每个变量会有一个有效区域(范围),这个就是作用。...一个变量在其作用内是可以被访问的,在作用域外不能被访问。 全局作用与局部作用 变量的执行环境有两种:一种是全局,另一种是局部(如:放在函数里面)。...如果window下也不存在该空间,会在全局作用之下进行空间的创建。 作用链 由于在全局作用当中会包含局部作用,局部作用当中还可以再包含局部作用。...当有多层作用时,深层的作用域中查找变量时,会按照“当前作用”到“上层作用”再到“全局作用”的顺序进行查找,这个查找的顺序就可以理解为作用链。...var进行变量的声明,此时在函数这个局部的作用当中,并没有user这个存储空间,之后按照“作用链”向上翻找,也就是在全局(window)作用当中进行查找。

4.7K50

Vue之块级作用let和var

let let可以看做是更完美的var 2.var 1.var var在声明一个变量时,该变量只有在函数中才有自己的作用,在if和for中没有自己的作用。...在for中的i是没有自己的作用的,且js是异步执行,在js执行完后,才开始渲染页面,那就意味着我们在点击已经渲染出的button时,for循环已经遍历到最后一个,且这个for中的i没有自己的作用,他是被共享的...那这时候,为了实现效果就会引入函数(因为var在函数中有自己的作用),借助函数的作用让每个i都有自己的作用,点击按钮出现相应序号。这就是我们js常用的闭包。...用let声明的变量在if、for、function内都有自己的作用let解决点击按钮的问题 var btns = document.getElementsByTagName...和var的区别 用let声明的变量在if、for、function内都有自己的作用 用var声明的变量只有在function内有自己的作用

98010

js中的作用

前言 相信自从es6出来之后,你一定多少知道或者已经在项目中实践了部分的块级作用,在函数或者类的内部命名变量已经在使用let了,但是你知道它真正的作用是什么吗?...又是因为什么我们要用这个块级作用,本文与你一起探讨块级作用的场景以及所有细节问题。...es6之前的作用 特点1 :js只有函数级作用以及全局两种 特点2 :不通过var声明的变量直接赋值也可以用并且可以访问,原理是直接赋值到了window对象属性变量下,两者如果同时定义,那么会覆盖使用...,利用let块级作用特性,区别就是定义变量时 i是块级变量,所以定义的函数中的变量也是当时的块级作用,不随外面非块级元素值变化影响 var arr=[] for(let i=0;i<10;i++)...参考文档 前端技术文档-兵哥技术集锦,es6入门 let-mdn文档 变量提升-菜鸟教程 学习js闭包-阮一峰博客

3.2K20

var let const作用_实例变量用什么声明

输入 全局作用域中,用const和let声明的变量去哪了? 问题 各位大佬,问个问题,let、const声明的变量,暴露在全局,为什么没挂载到window下?究竟挂载到哪里去了?...输出 我们打开控制台,输入 const a = 123; function abcd() { console.log(a); // abcd函数的作用能访问到a }; dir(abcd);...可以在方法的[[Scopes]] 属性中,看到变量a const、let 这类都是,属于声明性环境记录,“Declarative Environment Records” ,和函数、类这些一样,在单独的存储空间...var这类,属于对象性环境记录,“object environment record”,会挂载到某个对象上,也会沿着原型链去向上查找 说明const、let声明变量不挂载到对象上,但是在全局的活动对象中能访问到...let、const 声明记录,也就是作用链那边没问题 但是不是全局window对象的属性,所以window.a访问不到 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

36620

JS学习系列 03 - 函数作用和块作用

在 ES5 及之前版本,JavaScript 只拥有函数作用,没有块作用(with 和 try...catch 除外)。在 ES6 中,JS 引入了块作用,{ } 内是单独的一个作用。...采用 let 或者 const 声明的变量会挟持所在块的作用,也就是说,这声明关键字会将变量绑定到所在的任意作用域中(通常是 {...} 内部)。 今天,我们就来深入研究一下函数作用和块作用。...块作用 ES5 及以前 JavaScript 中具有块作用的只有 with 和 try...catch 语句,在 ES6 及以后的版本添加了具有块作用的变量标识符 let 和 const 。...2.3 let let 关键字可以将变量绑定到任意作用域中(通常是 {...} 内部)。换句话说,let 为其声明的变量隐式的劫持了所在的块作用。...但是使用 let 进行的声明不会存在作用提升,声明的变量在被运行之前,并不存在。

1.6K10

JS学习系列 03 - 函数作用和块作用

在 ES5 及之前版本,JavaScript 只拥有函数作用,没有块作用(with 和 try...catch 除外)。在 ES6 中,JS 引入了块作用,{ } 内是单独的一个作用。...采用 let 或者 const 声明的变量会挟持所在块的作用,也就是说,这声明关键字会将变量绑定到所在的任意作用域中(通常是 {...} 内部)。 今天,我们就来深入研究一下函数作用和块作用。...块作用 ES5 及以前 JavaScript 中具有块作用的只有 with 和 try...catch 语句,在 ES6 及以后的版本添加了具有块作用的变量标识符 let 和 const 。...2.3 let let 关键字可以将变量绑定到任意作用域中(通常是 {...} 内部)。换句话说,let 为其声明的变量隐式的劫持了所在的块作用。...但是使用 let 进行的声明不会存在作用提升,声明的变量在被运行之前,并不存在。

9310

js作用作用链和它的一些优化

块级作用(Block Scope): 由ECMAScript2015的变量声明标识符let和const引入,在使用这两者进行变量声明时,根据最近的一对花括号{}创建。.../* 全局作用 start,JavaScript语言环境初始化时就被创建 *//* 模块作用 start,作为ES Module解析和执行时被创建 */let name = 'Wu';{ /* 块级作用...uninitialized>, sayName: , }, outer: , }*/let...但是,由于let的暂时性死区特性,变量name在自身声明和初始化赋值之前处于不可引用和未初始化状态。函数的声明则不同,除了声明提前外还会初始化函数的引用。...根据上面的概念,我们来看看下面的例子:let phrase = 'Hello';function sayHello(name) { /* 函数的作用链, functionLexicalEnvironment

1.7K00

JS作用与闭包

JS作用分为全局作用和函数作用。 2|0全局作用 全局作用在页面打开时创建,在页面关闭时销毁。...3|0函数作用 调用函数时创建函数作用,函数执行完毕后,函数作用销毁。 每调用一次函数就会创建一个新的函数作用,他们之间是互相独立的。...在函数作用域中,可以访问到全局作用的变量,在全局作用域中无法访问到函数作用的变量。...)] 数组的第一项是作用链的最前端,最后一项是作用链的末端。...随着匿名函数的作用链被销毁,其他作用(除了全局作用)也都可以安全的被销毁了。 下图展示了调用compareNames()的过程中产生的作用链之间的关系。

1.9K20
领券