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

静态作用动态作用

静态作用动态作用 所谓作用规则就是程序解析名字的方法。...仅有少数语言使用动态作用规则,例如 Emacs Lisp,其函数内的 unbound variables 的解析是根据函数被调用时的环境来决定的。...其原因是在采用静态作用规则的时候,对于函数的定义者来说,他可以通过阅读自己的代码很容易地知道他所使用到的变量当前绑定的具体实体是什么,而在使用采用动态作用的语言时,则需要考虑这个函数被调用的时候该变量所对应的具体实体...(createAddN 1))) (let ((n 2)) (add1 n))) 显然我们还是希望这个表达式求值的结果为 3,这对采用静态作用的语言来说仍然如此,但对于采用动态作用语言的使用者来说这就有问题了...对于单一的变量来说,直接使用一个栈就可以了,当进行动态绑定的时候将值入栈,离开动态绑定的作用时出栈。

2.1K10

JS作用作用

JS中的作用就是在一定的空间范围内对数据进行读写操作。 在JS中一个变量的作用(scope)是程序中定义这个变量的区域。 变量有全局变量和局部变量两种。...下面就要借助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作用

    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 我们再来看下面的例子...,当前b的值为undefined 4-2)定义局部变量a,当前a的值为undefined 4-3)定义局部变量c,当前c的值为undefined 4-4)给局部变量b进行赋值,使用...2*a表达式的结果进行赋值,由于a的值为undefined,所以b的值为NaN(Not a Number) 4-5)给局部变量a赋值为20 4-6)给局部变量c进行赋值,使用a+1表达式的结果进行赋值

    10410

    JavaScript作用深度剖析:动态作用

    前言 • 在上篇文章中, 我们说了作用一共分为两种:词法作用动态作用,而这篇文章我们一起来学习 动态作用。...动态作用动态作用似乎有着很好的理由让作用作为一个在运行时就被动态确定的形式,而不是在写代码时进行静态确定的形式。...• 但这其实是因为你可能只写过基于词法作用的代码,因此对动态作用感到陌生。如果你只用基于动态作用的语言写过代码,就会觉得很自然的,而词法作用看上去才怪怪的。...• 事实上 JavaScript 并不具有动态作用,它只有词法作用。但 this 机制的存在在某种程度上很像动态作用。 词法作用动态作用的区别?...• 动态作用其实是 JavaScript 另一个重要机制 this 的表亲 • 词法作用是在书写代码或定义时确定的 • 动态作用是在运行时确定的。

    10510

    了解 JS 作用作用

    JS使用的是词法作用(lexical scope) 不在任何函数内声明的变量(函数内省略var的也算全局)称作全局变量(global scope) 在函数内声明的变量具有函数作用(function...JS中的声明提前 js中的函数作用是指在函数内声明的所有变量在函数体内始终是可见的。...引入一大段话来解释: 每一段js代码(全局代码或函数)都有一个与之关联的作用链(scope chain)。 这个作用链是一个对象列表或者链表,这组对象定义了这段代码中“作用域中”的变量。...作用链举例: 在js最顶层代码中(也就是不包括任何函数定义内的代码),作用链由一个全局对象组成。...); 这里有一个函数,它是匿名函数,既然是函数,那就在作用链上具有一个对象,这个函数里边使用到了变量i,它自然会在作用上寻找它。

    2K10

    原生JS | 作用

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

    4.7K50

    js作用详解

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

    2.5K10

    js中的作用

    前言 相信自从es6出来之后,你一定多少知道或者已经在项目中实践了部分的块级作用,在函数或者类的内部命名变量已经在使用let了,但是你知道它真正的作用是什么吗?...又是因为什么我们要用这个块级作用,本文与你一起探讨块级作用的场景以及所有细节问题。...es6之前的作用 特点1 :js只有函数级作用以及全局两种 特点2 :不通过var声明的变量直接赋值也可以用并且可以访问,原理是直接赋值到了window对象属性变量下,两者如果同时定义,那么会覆盖使用...,函数内可以访问外部作用,而全局是不可以访问函数作用内的变量或者方法的 var a=b=c=12 function demo(){ var z=13 console.log(b)//12...块级作用 场景一 循环中的块级作用 如果我们有一个遍历循环的绑定事件,并且需要把当前的指针绑定到对应方法中。

    3.2K20

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

    在 ES5 及之前版本,JavaScript 只拥有函数作用,没有块作用(with 和 try...catch 除外)。在 ES6 中,JS 引入了块作用,{ } 内是单独的一个作用。...函数中的作用 函数作用的含义是指,属于这个函数的任何声明(变量或函数)都可以在这个函数的范围内使用及复用(包括这个函数嵌套内的作用)。...但是软件设计在某种情况下可能自然而然的要求使用同样的标识符名称,因此在这种情况下使用作用来“隐藏”内部声明是唯一的最佳选择。...但是使用 let 进行的声明不会存在作用提升,声明的变量在被运行之前,并不存在。...使用作用可以解决这个问题,可以让引擎清楚的知道没有必要继续保存这个 bigData 。

    1.6K10

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

    在 ES5 及之前版本,JavaScript 只拥有函数作用,没有块作用(with 和 try...catch 除外)。在 ES6 中,JS 引入了块作用,{ } 内是单独的一个作用。...函数中的作用 函数作用的含义是指,属于这个函数的任何声明(变量或函数)都可以在这个函数的范围内使用及复用(包括这个函数嵌套内的作用)。...但是软件设计在某种情况下可能自然而然的要求使用同样的标识符名称,因此在这种情况下使用作用来“隐藏”内部声明是唯一的最佳选择。...但是使用 let 进行的声明不会存在作用提升,声明的变量在被运行之前,并不存在。...使用作用可以解决这个问题,可以让引擎清楚的知道没有必要继续保存这个 bigData 。

    11410

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

    '; console.log(answer); /* 函数作用 end */}/* 模块作用 end *//* 全局作用 end */作用的嵌套作用使用上具有嵌套特征。...这种标识符解析性能的规律,让我们可以得出以下使用变量的优化点:对于频繁引用的外部作用的变量,可以根据情况在当前作用内声明赋值为局部变量后使用。减少作用增强with语句的使用。...with语句可以在当前作用链前端临时添加一个词法环境,从而在位置构建和使用新的作用链。...总结随着JavaScript语言的发展,语言中的作用的种类也变得丰富起来,不再局限于函数作用作为最小变量声明范围来使用,而是可以基于更小范围的跨级作用来管理我们的变量引用范围。...也根据这个过程,我们大概总结出了两点关于作用和变量使用的性能优化点。作用使用作为每一位JavaScript开发人员的必修课,了解得深入才能在使用它的时候不再迷茫。

    1.7K00

    JS作用与闭包

    JS作用分为全局作用和函数作用。 2|0全局作用 全局作用在页面打开时创建,在页面关闭时销毁。...在全局作用域中,创建的变量都会作为window对象的属性保存; 创建的函数都会作为window对象的方法保存。 变量在函数外定义就是全局变量,在全局作用域中有一个全局对象window,可以直接使用。...3|0函数作用 调用函数时创建函数作用,函数执行完毕后,函数作用销毁。 每调用一次函数就会创建一个新的函数作用,他们之间是互相独立的。...在函数作用域中,可以访问到全局作用的变量,在全局作用域中无法访问到函数作用的变量。...当在函数作用操作一个变量时,会现在自身作用域中寻找,如果有就直接使用,如果没有则向上一级作用域中寻找在函数作用域中也有声明提前的特性使用var关键字声明的变量,会在函数中所有的代码执行之前被声明 function

    1.9K20

    JS作用下 21

    ES6之前和ES6分开研究 1.需要明确: 1.ES6定义变量通过let 2.ES6除了全局作用、局部作用以外, 还新增了块级作用...3.ES6虽然新增了块级作用, 但是通过let定义变量并无差异(都是局部变量) 2.ES6作用链 1.1.全局作用我们又称之为0级作用 2.2....定义函数或者代码块都会开启的作用就是1级/2级/3级/...作用 2.3.JavaScript会将这些作用链接在一起形成一个链条, 这个链条就是作用链 0...---> 1 ----> 2 ----> 3 ----> 4 2.4.除0级作用以外, 当前作用级别等于上一级+1 3.变量在作用链查找规则...3.1先在当前找, 找到就使用当前作用找到的 3.2如果当前作用域中没有找到, 就去上一级作用域中查找 3.3以此类推直到0级为止, 如果0级作用还没找到, 就报错

    1.3K20

    JS作用(入门篇)

    这套规则被称为作用js作用规则并不像其他语言(比如 c、java 等)那么严谨,甚至很多时候还会让新手一头雾水。...本文要讲作用有以下几个: 全局作用(window / global) 函数作用(function) 块状作用({}) 动态作用(this 粗略讲解) 本文主要探讨日常工作中需要了解的几个点,所以并不会深入讲解...变量与常量 在了解作用之前,需要先了解 js 的变量和常量是如何声明和使用js 的变量声明有 2 种:var 和 let。...块状作用 在 {} 使用 let 定义的变量 和 const 定义的常量,属于块级作用。...使用 let 和 const 。 动态作用 动态作用主要是指 this 。 动态作用不关心函数和作用是如何声明以及在何处声明的,它只关心从何处调用(箭头函数除外)。

    96110
    领券