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

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

在 ES5 及之前版本,JavaScript 只拥有函数作用,没有块作用(with 和 try...catch 除外)。在 ES6 中,JS 引入了块作用,{ } 内是单独的一个作用。...函数中的作用 函数作用的含义是指,属于这个函数的任何声明(变量或函数)都可以在这个函数的范围内使用及复用(包括这个函数嵌套内的作用)。...由于标识符 a、b、c 和 bar都属于函数 foo 的作用,所以在全局作用域中访问会报错,因为它们都没有定义,但是在函数 foo 内部,这些标识符都是可以访问的,这就是函数作用。...总结 函数是 JavaScript 中最常见的作用单元。块作用指的是变量和函数不仅可以属于所处的函数作用,也可以属于某个代码块。...本质上,声明在一个函数内部的变量或函数会在所处的作用域中“隐藏”起来,这是有意为之的良好软件的设计原则。 有些人认为块作用不应该完全作为函数作用的替代方案。

1.6K10

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

在 ES5 及之前版本,JavaScript 只拥有函数作用,没有块作用(with 和 try...catch 除外)。在 ES6 中,JS 引入了块作用,{ } 内是单独的一个作用。...函数中的作用 函数作用的含义是指,属于这个函数的任何声明(变量或函数)都可以在这个函数的范围内使用及复用(包括这个函数嵌套内的作用)。...由于标识符 a、b、c 和 bar都属于函数 foo 的作用,所以在全局作用域中访问会报错,因为它们都没有定义,但是在函数 foo 内部,这些标识符都是可以访问的,这就是函数作用。...总结 函数是 JavaScript 中最常见的作用单元。块作用指的是变量和函数不仅可以属于所处的函数作用,也可以属于某个代码块。...本质上,声明在一个函数内部的变量或函数会在所处的作用域中“隐藏”起来,这是有意为之的良好软件的设计原则。 有些人认为块作用不应该完全作为函数作用的替代方案。

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

    js函数作用和闭包

    1、定义 作用(scope)指的是变量存在的范围。...2、分类: 在 ES5 的规范中,Javascript 只有两种作用: 一种是全局作用,变量在整个程序中一直存在,所有地方都可以读取; 另一种是函数作用,变量只在函数内部存在。...在函数内部定义的变量,外部无法读取,称为“局部变量”(local variable) javaScript 语言特有"链式作用"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量...4、作用规则 {}不产生一个作用,定义函数才会产生一个函数作用 函数在执行的过程中,先从自己内部找变量 如果找不到,再从创建当前函数所在的作用去找, 以此往上 var a = 1 function...由于for循环不会产生一个作用,所以可以不用return。

    1.4K20

    JS作用作用

    JS中的作用就是在一定的空间范围内对数据进行读写操作。 在JS中一个变量的作用(scope)是程序中定义这个变量的区域。 变量有全局变量和局部变量两种。...注:这边的“定义”,我认为有“创建与下定义”的意思,比如定义一个函数,定义一个方法,都是先创建一个函数,再给它里面添加一些东西。 下面就要借助JS作用链来更好的理解作用了。...搜索过程始终从作用链的前端开始,然后逐级地向后(全局执行环境)回溯,直到找到标识符为止。 此外还要讲下JS作用域中的块级作用JS中是没有块级作用这个概念的。 什么是块级作用呢?...JS并不支持块级作用,它只支持函数作用,而且在一个函数中的任何位置定义的变量在该函数中的任何地方都是可见的。 那么JS又该怎么拥有块级作用呢?...根据“在一个函数中定义的变量,当这个函数调用完之后,变量会被销毁”的特性,来模拟出JS的块级作用

    4.1K30

    JS基础——作用作用

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

    3.5K10

    JS作用

    JavaScript的作用有全局作用和局部作用 先通过一下代码来体验下作用 var x = 1; function f1(){ var y = 2; x = 10; console.log...undefined 就是报如下的错误,也就是y是个未定义的变量 VM42:7 Uncaught ReferenceError: y is not defined at :7:13 上述代码中变量x就是全局作用...,方法f1的作用也是全局,f1方法中的变量y是局部的,y的作用范围仅限f1方法体内,离开了f1的方法体的作用范围,就无法获取到y的值,所以上述的例子中最后打印y的时候是undefined 我们再来看下面的例子...不管怎样我们来对上述代码进行一下预解析, 1)定义全局变量a 2)定义全局函数f1 3)给全局变量a赋值为10 4)运行f1 4-1)定义局部变量b,当前b的值为undefined 4-2)定义局部变量

    11310

    函数作用和块作用

    函数中的作用 很对人认为 JavaScript 具有基于函数作用,意味着每声明一个函数都会为其自身创建一个气泡,而其他结构不会创建作用气泡。但事实上并不完全正确!...实际的结果就是在整个代码片段得到周围创建了一个作用气泡,也就是说这段代码中的任何声明都将绑定在整个新创建的包装函数作用里,而不是先前所在的作用 为什么隐藏“变量”和“函数”是一个非常有用的技术。...函数作用 在任意代码片段外部添加包装函数,可以将内部的变量和函数定义“隐藏”起来,外部作用无法访问包装函数内部的任何内容。虽然这种技术可以解决一些问题,但是它并不理想,因为会导致一些额外的问题。...块作用 尽管函数作用是最常见的作用单元,但是其他类型的作用单元也是存在的,并且通过使用其他类型的作用单元甚至可以实现维护起来更加优秀、简洁 除 JavaScript 外的很多编程语言都支持块作用...本质上,声明一个函数内部的变量或函数会在所处的作用隐藏起来,这是有意为之的良好软件的设计原则。 但函数不是唯一的作用单元。块作用指的是变量和函数不仅可以属于所处的作用,有可以属于某个代码块。

    2.4K20

    了解 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进阶:作用作用

    2.全局作用函数作用 在代码中任何地方都能访问到的对象拥有全局作用,一般来说以下几种情形拥有全局作用: 最外层函数 和在最外层函数外面定义的变量拥有全局作用 var outVariable...全局作用有个弊端:如果我们写了很多行 JS 代码,变量定义都没有用函数包括,那么它们就全部都在全局作用域中。这样就会 污染全局命名空间, 容易引起命名冲突。...因为放在里面的所有变量,都不会被外泄和暴露,不会污染到外面,不会对其他的库或者 JS 脚本造成影响。这是函数作用的一个体现。...函数作用,是指声明在函数内部的变量,和全局作用相反,局部作用一般只在固定的代码片段内可访问到,最常见的例如函数内部。...执行函数代码 垃圾回收 JavaScript解释阶段便会确定作用规则,因此作用函数定义时就已经确定了,而不是在函数调用时确定,但是执行上下文是函数执行之前创建的。

    2.6K20

    js作用详解

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

    2.5K10

    原生JS | 作用

    一个变量在其作用内是可以被访问的,在作用域外不能被访问。 全局作用与局部作用 变量的执行环境有两种:一种是全局,另一种是局部(如:放在函数里面)。...不同作用的访问关系 在函数内部声明的变量(局部变量),在函数外部并不能访问。在函数外部声明的变量,在函数内部可以访问。 一句话概括:“局部可以访问全局,但全局不能访问局部”。...如果window下也不存在该空间,会在全局作用之下进行空间的创建。 作用链 由于在全局作用当中会包含局部作用,局部作用当中还可以再包含局部作用。...当有多层作用时,深层的作用域中查找变量时,会按照“当前作用”到“上层作用”再到“全局作用”的顺序进行查找,这个查找的顺序就可以理解为作用链。...var进行变量的声明,此时在函数这个局部的作用当中,并没有user这个存储空间,之后按照“作用链”向上翻找,也就是在全局(window)作用当中进行查找。

    4.8K50

    重学JS-8-函数作用、闭包

    思维导图 通过下面的思维导图,我们先对JavaScript的函数作用、闭包一些基本的了解。 函数作用 作用决定了变量的可访问性,全局作用,局部作用函数作用)。...let和const具有块作用,块级作用包括在函数内部和在一个代码块内部。 作用链 表示不同作用里面,有多个同名变量,变量的优先次序。...也就是说,闭包让你可以在一个内层函数中访问到其外层函数作用。在 JavaScript 中,每当创建一个函数,闭包就会在函数创建的同时被创建出来。...词法环境 词法环境(Lexical Environment)是作用内部(隐藏)的关联对象。...函数的执行,可以分为创建词法环境的阶段和执行的阶段。 创建阶段 创建作用链、变量对象、决定this。 执行阶段 变量赋值、函数引用等。

    36520

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

    1.前言 作用是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期。很惭愧,我今天才深入理解JS作用..我不配做一个程序员.....开玩笑,什么时候理解都不晚,重要的是理解了以后能不能深深地扎在记忆里,不能,那就写下来 2.块级作用 在一个代码块(括在一对花括号中的一组语句)中定义的所有变量在代码块的外部是不可见的。...来,拋一个典型的问题出来,你就明白块级作用出现的重要性了。...在ES5时代,还没有块级作用这个概念,但是当时也有一种解决方法,那就是.. .. .. .. .....、以及块级作用出现的意义,方便更好的记住。

    3K10

    js 函数作用与this 的指向实例 原

    容易犯错的this和作用 var someuser = { name: 'byvoid', func: function() { console.log(this.name...; f1(); // 输出 top var f2 = function() { var scope = 'f2'; f1(); }; f2(); // 输出 top 上面解释:静态作用的含义是函数作用的嵌套关系由定义时决定而不是调用时决定...,又称为词法作用函数f1在查找变量定义时,在语法分析时就已经完成,而不需要等到f1被调用的时候才开始 上面的例子如果增加var scope = 'top1';则f2(); // 输出 top1,因为...var name="local"; console.log(name) } console.log(name); 全部输出local因为if没有作用...但执行ss()时,作用链是: ss()->t()->window,所以name是”tlwy" var myvar = "my value"; (function() { console.log

    77320

    函数作用

    什么是函数的声明前置 (1)变量的声明前置 所谓的变量声明前置就是在一个作用块中,所有的变量都被放在块的开始出声明。...和变量声明前置一样,执行代码之前会先读取函数声明,只要函数在代码中进行了声明,无论它在哪个位置上进行声明,js引擎都会将它的声明放在范围作用的顶部。...js引擎将函数名视同变量名,所以采用function命令声明函数时,整个函数会像变量声明一样,被提升到代码头部(用function声明函数函数声明会前置)。所以下面的代码不会报错。...它的目的只有两个:一是不必为函数命名,避免了污染全局变量;二是IIFE内部形成了一个单独的作用,可以封装一些外部无法读取的私有变量。...() } // 输出 10 -------------------------------- /*解释:作用链查找的伪代码如下 进入全局执行上下文: globalContext = { AO:

    84040

    Kotlin | 作用函数

    什么是作用函数(Scope Functions)? Kotlin 标准库包含了几个特殊的函数,其目的是在调用对象的上下文环境(context)中执行代码块。...当你在提供了 lambda 表达式的对象上调用此类函数时,它会形成一个临时作用。在此作用内,你可以在不使用其名称的情况下访问该对象,这些函数被称为作用函数。...由于这 5 个作用函数的性质有些相似,所以大家可能经常不知道在哪种情况下该使用哪个函数,以至于最终放弃使用作用函数?,所以为了避免类似悲剧发生,我们首先来讨论一下他们之间的区别以及使用场景。...区别 由于作用函数本质上非常相似,因此理解它们之间的差异非常重要。...:with takeIf 和 takeUnless 除了作用函数之外,标准库还包含函数 takeIf 和 takeUnless。

    94130
    领券