作用域

JS闭包

血红的双手。 提交于 2019-12-15 20:07:56
函数与对其状态即 词法环境 ( lexical environment )的引用共同构成 闭包 ( closure )。也就是说,闭包可以让你从内部函数访问外部函数作用域。在JavaScript,函数在每次创建时生成闭包。 词法作用域 请看下面的代码: function init() { var name = "Mozilla"; // name 是一个被 init 创建的局部变量 function displayName() { // displayName() 是内部函数,一个闭包 alert(name); // 使用了父函数中声明的变量 } displayName(); } init(); init() 创建了一个局部变量 name 和一个名为 displayName() 的函数。 displayName() 是定义在 init() 里的内部函数,仅在该函数体内可被获取。请注意, displayName() 内没有自己的局部变量,然而它可以访问到外部函数的变量,所以 displayName() 可以使用父函数 init() 中声明的变量 name 。 运行该代码后发现, displayName() 内的 alert() 语句显示出了 name 变量的值(该变量在父函数中声明)。这个 词法作用域 的例子描述了引擎是如何解析嵌套函数中的变量的。词法(lexical)一词表明

CSS:var变量的局部作用域(继承)特性

醉酒当歌 提交于 2019-12-15 16:46:51
一、CSS变量非全局 最近做项目,发现CSS变量一个有意思的特性,那就是变量作用域非全局。 举个例子,如下HTML和CSS: <div class="box"> <div class="a">测试a</div> <div class="b">测试b</div> <div class="c">测试c</div> </div> .box { --color: red; color: var(--color); } .a { --color: green; color: var(--color); } .b { --color: blue; color: var(--color); } .c { --color: yellow; } web前端开发学习Q-q-u-n: 784783012 ,分享学习的方法和需要注意的小细节,不停更新最新的教程和学习方法 (详细的前端项目实战教学视频,PDF) 虽然整个CSS公用一个上下文文档,但是,对于CSS变量,却是有作用域概念的,变量只能作用于自身以及后代元素,兄弟元素,祖先元素都不能享用。 因此,这里最终的颜色是:绿、蓝和红。如下截图: 所以,如果你的变量是全局享用的,则建议放在 :root 上,例如: :root { --color: red; } 当然,也可以使用body或者html标签: body { --color: red; }

javascript学习笔记之函数

半城伤御伤魂 提交于 2019-12-14 17:03:48
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、函数声明 无参数: function 函数名(){ //可以有返回值 return 返回值; } 有参数: function 函数名(arg1, arg2){ //可以有返回值 return 返回值; } 使用Function构造函数 varbox = new Function('num1','num2' ,'return num1+num2'); PS:第三种方式我们不推荐,因为这种语法会导致解析两次代码(第一次解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串), 从而影响性能。但我们可以通过这种语法来理解"函数是对象,函数名是指针"的概念 2、arguments对象 arguments可以对传进来的参数进行处理,arguments.length可以得到传进来的参数的个数。 3、作为值的函数 ECMAScript中的函数名本身就是变量,所以函数也可以作为值来使用。也就是说,不仅可以像传递参数一样把一个函数传递给另一个函数, 而且可以将一个函数作为另一个函数的结果返回。 4、函数内部属性 在函数内部,有两个特殊的对象:arguments和this。arguments是一个类数组对象,包含着传入函数中的所有参数, 主要用途是保存函数参数。但这个对象还有一个名叫callee的属性

函数和函数的作用域问题,arguments

橙三吉。 提交于 2019-12-14 16:56:09
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> this的值 :在函数执行时,this关键字并不会指向正在运行的函数本身,而是指向调用该函数的对象.所以,如果你想在函数内部获取函数自身的引用,只能使用函数名或者使用argument.callee属性( 严格模式 下不可用),如果该函数是一个匿名函数,则你只能使用后者. 1.定义函数 三种方式: 1)函数声明 (function语句) function name ([ param [, param [, ... param ]]]) { statements } name函数名. param函数的参数的名称,一个函数最多可以有255个参数. statements这些语句组成了函数的函数体. 2)函数表达式 (function操作符) 函数表达式和函数声明非常类似,它们甚至有相同的语法 (查看 function操作符 了解详情 ): function [ name ]([ param ] [, param ] [..., param ]) { statements } name函数名,可以省略,省略函数名的话,该函数就成为了匿名函数. param函数的参数的名称,一个函数最多可以有255个参数. statements这些语句组成了函数的函数体. 3)Function构造函数 和其他类型的对象一样,

var 为什么会被let const 替代

北城以北 提交于 2019-12-14 15:13:19
1.变量提升是指在子块中定义的变量,在某些特殊情况下(比如说上文提到的for循环就是一个子块),其作用域扩大到了父块的范围内(doSomething是一个父块),有些文章也会把他称作“变量泄漏”,是一个概念。 2.var定义变量的作用域是函数作用域,并非块级作用域(ES5没有块级作用域的概念),变量是很容易被提升的,一旦将其提升了,就会超出离他最近的方法外,暂时发现的变量提升的方法有:for循环、函数内外定义同名变量 var name ='dkvirus' function test () { console.log(name) var name = 'hello' } test()//undifined 此时test()内的变量name=''hello'提升了,作用域范围变成了全局,将变量name =‘dkvirus’覆盖,所以显示undifined,如果用let的话,会报错变量name未initialization,而不是undifined 来源: https://www.cnblogs.com/chengqiaoli/p/12039065.html

JavaScript数组,函数及预解析

强颜欢笑 提交于 2019-12-14 14:01:02
1 数组 1.1 为什么要学习数组 之前学习的数据类型,只能存储一个值(比如:Number/String。我们想存储班级中所有学生的姓名,此时该如何存储? 1.2 数组的概念 所谓数组,就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数组。 1.3 数组的定义 数组是一个有序的列表,可以在数组中存放任意的数据,并且数组的长度可以动态的调整。 通过数组字面量创建数组 创建一个空数组 var arr1 = []; 创建一个包含3个数值的数组,多个数组项以逗号隔开 var arr2 = [1, 3, 4]; 创建一个包含2个字符串的数组 var arr3 = ['a', 'c']; 可以通过数组的length属性获取数组的长度 console.log(arr3.length); 可以设置length属性改变数组中元素的个数 arr3.length = 0; 1.4 获取数组元素 数组的取值 格式:数组名[下标] 下标又称索引 功能:获取数组对应下标的那个值,如果下标不存在,则返回undefined。 var arr = ['red',, 'green', 'blue']; arr[0]; // red arr[2]; // blue arr[3]; // 这个数组的最大下标为2,因此返回undefined 1.5 遍历数组 遍历:遍及所有

小白怎么入门Web前端行业 JS基础知识点有哪些

落花浮王杯 提交于 2019-12-13 21:27:19
小白怎么入门Web前端行业?JS基础知识点有哪些?Web前端工程师是当前各大企业都比较稀缺的人才,薪资待遇和就业前景都很不错。不论是专业还是非专业,有基础亦或是无基础,都想通过学习Web前端实现高薪就业。不过,学习要一步一个脚印,不能一口吃一个胖子,所有的实战经验都是基于理论而积累形成,下面就给大家梳理汇总一下JS相关的基础知识点。 1、执行环境:有时也叫环境,是JavaScript中最为重要的一个概念,执行环境定义了变量或函数有权访问的其他数据。 2、变量对象:每一个执行环境都有一个与之关联的变量对象,环境中定义的所有的变量和函数都保存在这个的对象中。 3、作用域链:代码在环境中执行时,会创建变量对象的作用域链,保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终是当前执行代码所在环境的变量对象。 4、活动对象:如果当前执行环境是函数,则将活动对象作为变量对象。 5、可执行代码:1)全局代码:例如加载外部的JS文件或者本地标签内的代码,全局代码不包括 function体内的代码;2)函数代码:function体内的代码;3)eval代码:eval()函数计算某个字符串,并执行其中的JS代码,比如eval("alert('hello world')")。 6、执行上下文栈:在一个JS程序中,必定会产生多个执行上下文,JS引擎会以栈的方式来处理它们

《JavaScript语言精髓与编程实践》读书笔记--基础篇

老子叫甜甜 提交于 2019-12-13 18:53:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、弱类型语言: JavaScript 是弱类型语言。但所谓言 弱类型语言 ,只表明该语言在表达式运 算中不强制校验运算元的数据类型,而并不表明该语言是否具有类型系统。 2、 JavaScript 识别 6 种数据类型,并在运算过程中自动处理语言类型的转换。 2.1 6种数据类型: undefine、number、string、boolean、function、object, typeof 运算总是以字符串形式返回上述 6 种类型值之一。 2.2 变量的两种类型: 1)基本类型在内存中具有固定的大小,而引用类型则不同。例如,对象可以具有任意的长度,无固定大小。数组也是。 2)基本类型变量存的是数据的具体值,而引用类型变量保存的是值的引用。 基本类型: undefine、number、boolean 、 string 引用类型: function、object 3、 NaN 值: 至少表面上来看, 一个值应该与其自身“ 等值 / 全等”。但事实上,在 JavaScript 中存在一个例外:一个 NaN 值,与自身并不等值,也不全等。 4、 空字符 串用作对象成员。 在 JavaScript 中也可以用一对不包含任意字符的单引号与双引号来表示一 个空字符串( Null String ),其长度值总是为 0

五句话搞定JavaScript作用域

自闭症网瘾萝莉.ら 提交于 2019-12-13 16:09:42
JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走遍天下都不怕。 一、“JavaScript中无块级作用域” 在Java或C#中存在块级作用域,即:大括号也是一个作用域。 public static void main (){ if(1==1){ String name = "seven"; } System.out.println(name); } // 报错 public static void Main() { if(1==1){ string name = "seven"; } Console.WriteLine(name); } // 报错 在JavaScript语言中无块级作用域 function Main(){ if(1==1){ var name = 'seven'; } console.log(name); } // 输出: seven 补充:标题之所以添加双引号是因为JavaScript6中新引入了 let 关键字,用于指定变量属于块级作用域。 二、JavaScript采用函数作用域 在JavaScript中每个函数作为一个作用域,在外部无法访问内部作用域中的变量。 function Main(){ var innerValue = 'seven'; } Main(); console.log

ES6箭头函数

倾然丶 夕夏残阳落幕 提交于 2019-12-13 02:41:15
()=>{} demo: Vue中的method属性 好处: 在如下demo中 回调函数用箭头函数的形式 解决了this的作用域问题; 在箭头函数中 this纸箱根函数refreshToken; method:{ refreshToken(){ //apiCloud中刷新微信Token: let wxPlus = api.require('wxPlus'); wxPlus.refreshToken({ apiKey: '', dynamicToken: '' }, (ret, err)=> { if (ret.status) { //获取新的token,再次获取用户信息 this.getWechatUserInfo(ret.accessToken, ret.openId, ret.dynamicToken); } else { zs.toast(msg[err.code]); } }); }, } 来源: CSDN 作者: a流逝的好时光 链接: https://blog.csdn.net/weixin_44539537/article/details/103497395