首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏韩曙亮的移动开发专栏

    【JavaScript】作用 ② ( JavaScript 块级作用 | ES6 之前 等同于 全局局部作用 | ES6 使用 let const 声明变量 常量 有 块级作用 )

    一、JavaScript 块级作用 1、块级作用 - ES6 之前 等同于 全局作用 在 JavaScript 中 , 块级作用 指的是 在一对大括号 {} 内 声明的变量 只在这对大括号内部可见 ; 在 ES6 之前 JavaScript 只有 全局作用 和 局部作用 概念 , 没有 块级作用 概念 , 此时 块级作用 相当于 全局作用 或 局部作用 , 具体 取决于 {} 是在哪个作用域中 , 则 在 if 代码块中 使用 var 声明变量 , 具有 全局作用 ; 2、块级作用 - ES6 使用 let / const 声明变量 / 常量 ES6 引入了 let 和 const 关键字 // ES6 之前没有 块级作用 // 此时 块级作用 = 全局作用 if (true) { var num = 888 之后的块级作用 ES6 引入了 let 和 const 关键字 , 这两个关键字声明的变量具有块级作用 ; 在下面的代码中 , 变量 num2 是在 if 语句的 块级作用 中声明 , 因此它只在

    90210编辑于 2024-04-09
  • 来自专栏前端杂谈

    es6之块级作用

    块级作用 在es6(es2015)之前, 也就是es5中,作用只有两种: 1. 全局作用 2. 函数作用 正因为只有这两种作用, 所以存在 "变量提升" 现象, 即变量可以在声明之前使用,值为undefind.如下 console.log(tem);//输出undefined var tem 在es6中新增了块级作用,新增的块级作用通过 let 和 const 属性来体现: console.log(tem);//输出undefined let tem = 6; 下面介绍一下 let 和 const let 用法和 var 类似, 但是let声明的变量只在块级作用内有效 function fun1() { let n = 5; if (true) { let n = 10 ,这个区块对这些命令声明的变量,从一开始就形成了封闭作用

    781110发布于 2018-05-16
  • 来自专栏Czy‘s Blog

    作用作用

    作用作用链 通常来说,一段程序代码中所用到的名字并不总是有效或可用的,而限定这个名字的可用性的代码范围就是这个名字的作用scope。 如果一个变量或者其他表达式不在当前的作用,则将无法使用。作用也可以根据代码层次分层,以便子作用可以访问父作用,通常是指沿着链式的作用链查找,而不能从父作用引用子作用域中的变量和引用。 作用 JavaScript作用为静态作用static scope,也可以称为词法作用lexical scope,其主要特征在于,函数作用域中遇到既不是参数也不是函数内部定义的局部变量时,去函数定义时上下文中查 ,也就是声明时即规定作用,而假如是动态作用的话在此处会打印2。 作用、localContext作用、Global作用,总结来说,当需要使用函数或者变量时,如果在当前作用域中没有查到值,就会向上级作用去查,直到查到全局作用,这样一个查找过程形成的链条就叫做作用

    2.6K20发布于 2020-08-27
  • 来自专栏前端桃园

    ES6之块级作用

    作用 作用指变量所作用的范围,在 Javascript 中有两种作用: 全局作用 函数作用 变量提升 变量提升(Hoisting)被认为是, Javascript 中执行上下文 (特别是创建和执行阶段 具体表现就是所有通过 var 声明的变量会提升到当前作用的最前面。 所以在 ES6 中规定了 let 和 const 来支持块级作用。但是,是不是真的提升就不存在了呢,可以看下面暂时性死区这部分。 但是在嵌套的作用内使用 let 声明同一变量是被允许的。 ,所以就算使用相同的标识符也不会覆盖外部作用的变量, 而 var 是会覆盖外部作用的变量的。

    82040发布于 2018-06-27
  • 来自专栏囍楽云博客

    java作用-什么是JavaScript作用作用链?

    作用作用链也是面试中出镜率很高的问题之一java作用java作用,同时也是中最重要的基础概念之一。    今天我们将通过最简单实际的代码来展示函数作用和全局作用,在下篇文章中,我们将介绍块级作用和暂时性死区。    作用基本知识   简单来说,作用就是用来规定变量的作用范围的,在任何语言当中都会有作用的概念,在ES6以前,只有函数作用和全局作用,ES6之后又增加块级作用。    函数作用和全局作用   函数作用非常简单,比如,执行下面的foo函数,变量a在函数foo的作用内,所以在函数内可以正常的访问该变量,输出bar    function foo() ,就会就近首先在函数内查找变量是否声明赋值,如果函数内无法找到该变量,就跳出当前函数作用,到上层作用域中进行查找,这里的上层作用可能是也是一个函数作用,也可能是全局作用。   

    2.6K20编辑于 2022-12-29
  • 来自专栏博客迁移同步

    记录ES6作用的坑

    ); // 能正确执行吗 { function a(){} } console.log(a); { function a(){} } 其实上面的代码是这么执行的 // var a;作用里面的函数 a在块作用域外面是var a { // a = function(){} // 在作用里面赋值为function function a(){} } // 函数a在块级作用里面定义,在上面访问不了 但是在块级作用后面可以使用。 证明了a是var而不是let 所以上面的代码第一个a()报错,而console.log(a)是undefined,因为作用的上面只是var a,作用里面才赋值为function var a = 10 90; } console.log(a); 不同浏览器显示结果不同,chrome、firefox是30,safari是90 别纠结了,以后都用let,不用var就好了, 这个问题不管怎么解释都能举一反6来说明解释的错误

    17810编辑于 2023-05-06
  • 来自专栏囍楽云博客

    java作用-javaScript预编译、作用作用链详解

      ES5中只分为全局作用和函数作用java作用,也就是说for,if,while等语句是不会创建作用的。ES6(let,const)除外。    [[scope]]指的就是我们所说的作用,其中存储了前面说的执行期上下文的集合,这个属性是在函数被定义的时候就创建   作用链:[[scope]]中所存储的执行期上下文对象的集合,这个集合呈链式链接 ,我们把这种链式链接叫做作用链。    寻找变量的过程就是从变量作用链开始查找的,如果在当前的变量作用没找到,那么就去上一个变量作用里面去早   作用链创建的过程:   预编译   先来理解一下预编译,看例子:    需要注意的时候,函数存储被定义时的上下文的时候java作用,只是存储的是一个引用,而不是副本,正是因为这样,才能形成作用链,当函数在本函数的AO对象找不到的时候,就沿着本函数的[[scope]]存储的上一个作用的变量对象的引用到上一个作用里面去早

    2K40编辑于 2022-12-29
  • 来自专栏零域Blog

    JavaScript 作用作用

    content {:toc} JavaScript 作用 作用就是变量与函数的可访问范围。在JavaScript中,变量的作用有全局作用和局部作用两种。 ---- 全局作用(Global Scope) 在代码中任何地方都能访问到的对象拥有全局作用,一般来说以下 3 种情形拥有全局作用。 局部作用(Local Scope) 和全局作用相反,局部作用一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用称为函数作用 。 如 1. ---- 再补充几个例子 全局作用,函数作用,eval作用 var a = 10; // 全局 (function() { var b = 20;// 函数 })(); console.log 理解 JavaScript 作用作用链 JavaScript 深入浅出-慕课网

    2.4K10编辑于 2022-03-02
  • 来自专栏Web开发之路

    函数作用和块作用

    :a, bar, c bar 拥有自己的作用气泡 同样全局作用也拥有自己的作用气泡 a, bar, c 这些标识符都是属于 foo 的作用气泡,因此无法从 foo 的外部去对它们进行访问。 块作用 尽管函数作用是最常见的作用单元,但是其他类型的作用单元也是存在的,并且通过使用其他类型的作用单元甚至可以实现维护起来更加优秀、简洁 除 JavaScript 外的很多编程语言都支持块作用 幸好 ES6 改变了现状,引入了新的 let 关键字,提供了一种除 var 以外的另一种变量声明方法。 块作用在 es6 引入了新的关键字 let 之后成为了一个非常有用的机制 let 关键字可以将变量绑定到所在的任意作用域中,为其声明的变量隐式地劫持了所在的块作用 同样,const 也可以创建块作用变量 在 ES6 引入了 let 关键字,用来在任意代码块中声明变量,if(…) { let a = 2 } 会声明一个劫持了 if 的块的变量,并且将这个变量添加到块中。

    3.2K20发布于 2020-10-23
  • 来自专栏前端实习日记

    全局作用、函数作用、块级作用的理解

    1.前言 作用是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期。很惭愧,我今天才深入理解JS的作用..我不配做一个程序员.. ES6中新增的概念,在ES5中是没有的,ES5中没有? 没有的时候我们代码也写的好好的,现在新增的概念,我不用不行吗? 来,拋一个典型的问题出来,你就明白块级作用出现的重要性了。 在ES5时代,还没有块级作用这个概念,但是当时也有一种解决方法,那就是.. .. .. .. .. //全局变量 (function(){ for(var i = 0;i < 5; i++){} })() console.log("i =",i); //i = 100 ES<em>6</em>中为什么会出现块级<em>作用</em><em>域</em>的概念 、以及块级<em>作用</em><em>域</em>出现的意义,方便更好的记住。

    4K10发布于 2019-02-26
  • 来自专栏前端一会

    JS作用作用

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

    5.3K30发布于 2019-08-29
  • 来自专栏coding个人笔记

    作用、执行环境、作用

    作用,之前有介绍过,JavaScript无块级作用,只有函数作用,简单点说就是JavaScript的作用就是函数作用。因为有函数作用,所以我们有全局作用和局部作用的说法。 当代码在一个环境中执行时,会创建变量对象的一个作用链。作用链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。 当fun1执行的时候创建了一个作用链,所以fun1有两个变量对象,一个是自己,一个是全局环境的变量对象window。fun1可以在函数内部访问变量a,因为fun1所在的作用链可以找到变量a。 再比如: var a = 5; function fun1() { var b = 6; function fun2() { var c = 7; } } 这段代码有三个执行环境 ,作用链中的内部环境可以通过作用链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数。

    2.1K30发布于 2020-04-23
  • 来自专栏简易现代魔法

    静态作用和动态作用

    静态作用和动态作用 所谓作用规则就是程序解析名字的方法。 当然,采用动态作用规则的语言也会不断向外层作用寻找名字,所以对下面这个表达式求值,无论是采用静态作用规则还是动态作用规则,其结果都是 2: (let ((a 1)) (let ((doubleA 分别实现两种作用 下面要谈到的是对于一个解释器来说,这两种作用应该分别怎么实现 2,当然,刚刚也说了,动态作用其实没什么好处,这么做其实纯粹是为了好玩。 通过这个方式,我们就可以实现静态作用了。当我们在当前作用域中找不到一个变量的绑定时,我们就会在捕获到的环境中向外查找,直到找到或是没有更外层的作用为止。 正如前文所述,动态作用的实现其实是求值环境的动态绑定,要在一个静态作用的语言中模拟出这个效果,我们可以自己用一个类管理这个环境。

    2.8K10发布于 2021-08-10
  • 来自专栏青梅煮码

    JavaScript作用作用

    静态作用 作用 作用规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。 JavaScript 采用词法作用(lexical scoping),也就是静态作用。 因为 JavaScript 采用的是词法作用,函数的作用在函数定义的时候就决定了。 而与词法作用相对的是动态作用,函数的作用是在函数调用的时候才决定的。 总之一句话: 函数的作用在函数定义的时候就决定了 函数会沿着作用链去查找变量。 那么为什么 JavaScript 是静态作用呢?JavaScript 引擎是怎么处理函数的呢? 函数执行上下文被压入执行上下文栈 ECStack = [ fContext, checkscopeContext, globalContext ]; 6. 这样由多个执行上下文的变量对象构成的链表就叫做作用链。 由上可知,作用链是由 变量对象/活动对象 构成的。 活动变量 变量对象是与执行上下文相关的数据作用,存储了在上下文中定义的变量和函数声明。

    2.2K40编辑于 2023-03-02
  • 来自专栏不知非攻

    四、作用作用

    作用作用链本应该是一个非常简单的概念。 词法环境,其实就是作用,有的人叫词法作用等等 得出结论: 一、在JavaScript中,我们可以将作用定义为一套规则,这套规则用来管理JS引擎如何在当前作用以及嵌套的子作用域中根据标识符名称进行变量查找 作用链 首先我们要明确的一点是,作用作用链是不同的。 作用是一套规则。 而作用链则是在代码执行过程中,会动态变化的一条索引路径。 scopeChain[0]为作用链的最前端,而数组的最后一项,为作用链的最末端,所有的最末端都为全局变量对象。 很多人会误解为当前作用与上层作用为包含关系,但其实并不是。以最前端为起点,最末端为终点的单方向通道我认为是更加贴切的形容。如图。

    2K20发布于 2020-07-25
  • 来自专栏前端小学生

    JS作用作用

    一、作用分为块级作用、全局作用、函数作用作用就是一个独立的地盘,让变量不会外泄、暴露出去。也就是说作用最大的用处就是隔离变量,不同作用下同名变量不会有冲突。 二、作用链当前作用没有定义的变量,这成为自由变量 。需要向父级作用寻找(注意:这种说法并不严谨,作用域中取值,这里强调的是“创建”,而不是“调用”,切记切记,其实这就是所谓的"静态作用"。)。

    2.5K40编辑于 2023-05-30
  • 来自专栏各类技术文章~

    JS基础——作用作用

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

    4.4K10发布于 2021-10-22
  • 来自专栏韩曙亮的移动开发专栏

    【JavaScript】作用 ③ ( JavaScript 作用链 | 作用链变量查找机制 )

    一、JavaScript 作用链 1、作用 在 JavaScript 中 , 任何代码都有 作用 , 全局作用 : 在 <script> 标签中 或者 js 脚本中 定义的变量 属于 全局作用 ; 局部作用 : 在 函数中 定义的 变量 属于 局部作用 ; 块作用 : ES6 中 在 {} 代码块 中 使用 let / const 定义的 常量 / 变量 属于 块作用 ; ES6 之前使用 var 关键字在 {} 代码块 中定义的变量 , 取决于 代码块位置 , 代码块在全局作用 则 该变量属于全局作用 , 代码块在 局部作用 则该变量属于 局部作用 ; 2、作用链 如果在 确定取哪个值 , 这种作用结构 称为 " 作用链 " ; 内部函数 , 外部函数 , 全局变量 中 , 定义的变量名称 可能是相同的 , 给定一个变量名 , 需要从作用链中具体查找 作用链 是 的 局部作用 有该变量 , 则采用该变量 ; 如果 外部函数 的 局部作用 没有该变量 , 则向上一层 全局作用 查找 ; 如果 全局作用 有该变量 , 则采用该变量 ; 如果 全局作用

    59010编辑于 2024-04-09
  • 来自专栏书山有路勤为径

    作用

    标识符的作用有函数原型作用、局部作用(块作用)、类作用和 命名空间(namespace) 作用 函数原型作用 函数原型作用 函数原型作用 是C++ 程序中最小的作用——函数原型的声明中一定要包含形参的名称和类型说明 ,也就是说大括号范围之内,在程序的任何其他地方都不能引用这个标识符——所以它们的作用被称为函数原型作用 局部作用(块作用) 局部作用这里的 局部作用 主要指的是同一个函数体内(可以是主函数也可以是其他自定义的函数 //b的作用结束 }//a的作用结束 已经知道,函数形参的作用,从形参列表开始,到函数体结束之处结束。 类作用作用类可以被看做是一组有名字的成员的集合——具体地说,某一个类Class的成员member具有类作用——对于member的访问,有以下几种方式: 如果在class的任意一个成员函数中,没有声明同名的局部作用标识符 ,凡是在该命名空间内声明的,不属于前面提到的各个作用的标识符,都属于这个命名空间的作用

    1.3K20编辑于 2022-05-13
  • 来自专栏天天

    作用

    1.简介 1.javascript没有块级作用, 2.只有函数可以创建的作用。 所以,变量的声明时,全局代码要在代码前端声明,函数中要在函数体一开始就声明好。 作用在函数定义时就已经确定了。 而不是在函数调用时确定,而且建议使用 var, 作用主要就是为了隔离变量,不同作用下同名变量不会有冲突 2. 要通过作用对应的执行上下文环境来获取变量的值。 同一个作用下,不同的调用会产生不同的执行上下文环境,继而产生不同的变量的值。 所以,作用域中变量的值是在执行过程中产生的确定的,而作用却是在函数创建时就确定了 ?

    71330发布于 2018-09-29
领券