作用域

ES6教程:let和const命令的用法

左心房为你撑大大i 提交于 2020-02-26 03:05:47
ES6中新增了let和const命令,分别用于声明变量和常量。 1. 使用let命令取代var命令 在ES6之前的版本中,使用 var 声明变量,在ES6中新增了 let 来声明变量。 let 完全可以取代 var ,因为二者的语义相同,而且 let 没有“副作用”。 我们先来看一下 let 命令有哪些特点: 不存在变量提升:变量只有在声明之后才能使用; 不允许重复声明:在相同的作用域下,一个变量名只能使用一次,不能重复声明; 具有块级作用域:在代码块中声明的变量,只对当前代码块和其内部嵌套代码块有效,如果嵌套代码块中声明了同名变量时,则对该嵌套代码块无效; 存在暂时性死区:当全局变量与代码块中变量同名时,代码块中的变量就有了块级作用域,其变量声明前不能使用。 JavaScript是弱类型的编程语言,在ES6之前使用 var 关键字声明变量,会发生变量提升的现象。简单来说,就是在声明变量之前就对该变量进行调用,程序不会报错,而且打印出来的值为 undefined 。如果是有Java或C++编程经验的小伙伴,肯定对这种现象是无法忍受的。我们用一段代码来演示一下这种现象: function test(){ console.log(i); var i = 1; } test(); 运行结果: undefined 上面代码中,变量 i 是使用 var 命令声明的

eclipse 快捷键大全,eclipse查找类,文件,添加注释

江枫思渺然 提交于 2020-02-26 02:23:28
/* ---------------------------------------自理解----------------------------------------*/ ctrl+shift+T //查找当前工程下的某个类 实时提示 ctrl+shift+R//查找当前工程下的某个文件 实时提示 ctrl+/添加注释 /* ---------------------------------------自理解----------------------------------------*/ 再给出常用eclipse 快捷键 Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加) Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了) Alt+↑ 当前行和上面一行交互位置(同上) Alt+← 前一个编辑的页面 Alt+→ 下一个编辑的页面(当然是针对上面那条来说了) Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性 Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后) Shift+Ctrl+Enter 在当前行插入空行(原理同上条) Ctrl+Q

存储持续性、作用域和链接性

北城以北 提交于 2020-02-26 00:00:01
例子: 头文件:state.h 源文件:state.cpp 其它源文件:t1.cpp t2.cpp t3.cpp, 这些源文件都包含头文件state.h。 需要定义一个全局变量供这些源文件中使用:方法如下 1、在 state.h声明全局变量: extern inta; 2、在state.cpp中定义该全局变量:int a =10; 这样其它源文件就可以使用该变量啦 这里需要的是“声明”,不是“定义”!根据C++标准的规定,一个变量声明必须同时满足两个条件,否则就是定义: (1)声明必须使用extern关键字;(2)不能给变量赋初值 extern int a; //声明 int a; //定义 int a = 0; //定义 extern int a =0; //定义 头文件中应使用extern关键字声明全局变量(不定义),如果这个变量有多个文件用到,可以新建一个cpp,在其中定义,把这个cpp加入工程即可。 头文件请不要定义任何变量,那是非常业余的行为…… 一般在头文件中申明,用extern,在cpp中定义。 如果在头文件中定义,如果这个头文件被多个cpp引用,会造成重复定义的链接错误。 头文件只能申明全局变量(extern),不可定义(不推荐使用) .cpp里,在最外层定义即可(int gi),直接引用 如果在.cpp里使用static定义,则该变量只在当前cpp文件中有效

什么是匿名函数?

孤者浪人 提交于 2020-02-25 12:48:39
在前端面试中面试官基本都会问到什么是匿名函数、什么是闭包函数。 本文就先来说一下什么是匿名函数。 匿名函数顾名思义就是没有名字的函数,通常我们所写的函数都是这样的: 1 function do(){ 2 // 执行代码 3 }; 4 5 // 调用 6 do(); 这种写法是定义了一个名为do的函数,并通过函数名称进行调用。 那如果没有名字是什么样子的啊? 1 function () { 2 // 执行代码 3 }; 这种写法在编译的时候会报错: Uncaught SyntaxError: Unexpected token ( 这是为什么呢?原来时因为浏览器在进行语法分析的时候发现这个函数根本没法执行。 那要为什么还要匿名函数呢?在编程语言中如果又个编码方式那这种编码方式肯定是能正常运行的,那该如何让匿名函数跑起来呢?再看下面的例子: var do = function () { // 执行代码 } do(); 这种函数大家肯定都知道,其实这种写法就是将匿名函数复制为变量do,再通过变量名执行函数。 (function(){ // 执行代码   console.log("打印成功"); })(); 上面代码是什么意思呢? 可以先把上面的代码分几个部分: 第一部分是括号里面的匿名函数,第二部分是加上括号的匿名函数,第三部分带上最后面执行用的括号。

ES6躬行记(14)——函数

梦想的初衷 提交于 2020-02-25 07:46:01
  在前面的章节中,已陆陆续续介绍了ES6为改良函数而引入的几个新特性,本章将会继续讲解ES6对函数的其余改进,包括默认参数、元属性、块级函数和箭头函数等。 一、默认参数   在ES5时代,只能在函数体中定义参数的默认值,而自从ES6引入了默认参数(Default Parameter)后,就能让参数在声明时带上它的默认值,如下代码所示,func2()函数中的参数默认值在可读性和简洁性方面更为优秀。 function func1(name) { name = name || "strick"; //ES5的参数默认值 } function func2(name = "strick") { //ES6的参数默认值 } 1)undefined   只有当不给参数传值或传入undefined时,才会使用它的默认值。即使传入和undefined一样的假值(例如false、null等),也得不到它的默认值,如下所示。 function func(name = "strick") { return name; } func(undefined); //"strick" func(false); //false func(null); //null 2)位置   默认参数既可以位于普通参数之前,也可以位于其之后。例如下面的两个函数,都包含两个参数,其中一个带有默认值,依次执行,都能得到预期的结果。

Spring框架学习与实践(四)

六月ゝ 毕业季﹏ 提交于 2020-02-24 12:31:08
Spring 中 Bean 的作用域演练 Spring 中 Bean 有5种作用域,后面会详细介绍 singleton 和 prototype 这两种最常用的作用域。 作用域的种类 Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域。Spring3 为 Bean 定义了五种作用域,具体如下: 1, singleton 单例模式,使用 singleton 定义的 Bean 在 Spring 容器中只有一个实例,这也是 Bean 默认的作用域 2, prototype 原型模式,每次通过 Spring 容器获取 prototype 定义的 Bean 时,容器都将创建一个新的 Bean 实例 3, request 在一次 HTTP 请求中,容器会返回该 Bean 的同一个实例。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Request 内有效 4, session 在一次 HTTP Session 中,容器会返回该 Bean 的同一个实例。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Session 内有效 5, global Session 在一个全局的 HTTP Session 中,容器会返回该 Bean 的同一个实例。该作用域仅在使用 portlet context 时有效 在上述五种作用域中

作用域

偶尔善良 提交于 2020-02-23 17:37:09
1. 什么是命名空间 2. globals、locals 3. LEGB 规则 1. 什么是命名空间 我们在编写 Python 程序的过程中,如果要使用变量和函数,都需要先对变量和函数命名后才能使用。Python 会把命名后的变量和函数分配到不同的命名空间,并通过名称来识别它们。 Python为什么要区分不同的命名空间呢?它有两个作用:一个作用是不同的命名空间对应不同的作用域;另外一个作用是防止命名冲突。 2. globals、locals 在提到变量的作用域时,经常提到局部变量和全局变量,之所有称之为局部、全局,就是因为他们的自作用的区域不同,这就是作用域。 3. LEGB 规则 Python 使用 LEGB 的顺序来查找一个符号对应的对象: locals -> enclosing function -> globals -> builtins locals 当前所在命名空间(如函数、模块),函数的参数也属于命名空间内的变量。 enclosing 外部嵌套函数的命名空间(闭包中常见)。 1 def fun1(): 2 a = 10 3 def fun2(): 4 # a 位于外部嵌套函数的命名空间 5 print(a) globals 全局变量,函数定义所在模块的命名空间。 1 a = 1 2 def fun(): 3 # 需要通过 global 指令来声明全局变量 4

JS闭包原理分析

我怕爱的太早我们不能终老 提交于 2020-02-23 03:29:34
JS闭包原理分析 闭包是指有权访问另一个函数作用域中的变量的函数。在一个函数A内部返回另一个函数B,并且函数B里面使用者A函数内部的私有变量,此外在函数A外面定义一个变量接收函数B,这样就形成了闭包。 比如在一栋房子里面有很多个小房间,你手上通过拿着一个小房间的地址(xxx栋001房),那么通过小房间的地址就可以找到这栋房子,进入里面。 函数都有自己的执行环境,该环境定义了变量或者函数访问数据的权限。JS 在运行的时候,会为每一个执行函数分配内存空间,我们称这个空间为作用域对象(Scope Object)。当调用函数时,函数中分配的本地变量会被存储在这个作用域对象中。当函数执行了之后,该空间会被销毁,该空间内的变量也会被销毁。 函数作用域对象是按顺序访问的,最先能够访问的是当前函数的作用域,如果访问的变量在当前作用域没有,会访问上一层作用域,直到找到全局作用域(Global)对象。如果访问到全局作用域也没有这个对象,会抛出ReferenceError的异常。这就是所谓的作用域链(scope chian)。 闭包之所以能够访问到上一层函数中的局部变量,是因为当变量被捕获之后,即使上一层函数调用完毕出栈了,但是它的作用域对象没有被销毁,所以仍然能够被闭包访问。 在函数内部返回一个函数,并且在外部定义一个全局变量接收这个返回的函数,该变量存储的实际上是返回的函数的存储地址

作用域 属性链接 存储类型

你离开我真会死。 提交于 2020-02-22 10:21:23
一:作用域: 4中不同类型的作用域:代码块作用域,函数作用域,文件作用域和原型作用域 1:代码块作用域: 一对花括弧的代码称作一个代码块,任何在花括弧开始声明的标识符都具有代码块作用域 形参隐藏的问题:       K&RC中,形参在函数体外的声明中开始变生效,如果在函数体内有同名的表示服,他们就会将形参隐藏。       ANSIC中避免了这种情况,他把形参的作用域定义在函数最外层的那个函数体,也就是整个函数体,这样,声明与函数最外的局部变量无法和形参同名,因为他们的作用域相同 2:文件作用域: 任何在所有代码块之外声明的表示符都具有文件作用域 3:原型作用域: 函数原型中声明的参数名 只是为了防止名字冲突,但是并不是很有必要 4:函数作用域 他只是适用于语句标签,语句标签用于goto语句 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------分割线 ------------------------------------------------------------

Spring ApplicationContext.xml配置的12个技巧

浪尽此生 提交于 2020-02-22 08:22:44
转自 http://www.blogjava.net/103335460/articles/260845.html Spring是一个强有力的java程序框架,其被广泛应用于java的程序中。它用POJO提供了企业级服务。 Spring利用依赖注入可以获得简单而有效的测试能力。Spring beans,依赖关系,以及服务所需要的bean都将在配置文件中予以描述,配置文件一般采用XML格式。然而XML配置文件冗长而不易使用,在你进行一 个使用了大量bean的大项目中它将变得难以阅读和控制。 在这篇文章中我将给你展示12种的有关Spring XML配置文件的最佳技巧。它们中的一些具有更多的实际意义,而不仅是最好的技巧。请注意另外一些因素,例如域模型的设计,会影响到XML配置,但是这篇文章更关注于XML配置的可读性和可操控性。 1. 避免使用自动装配 Spring 可以通过bean类的自省来实现自动装配依赖,这样的话你就不必明确地描述bean的属性或者构造函数的参数。根据属性名称活匹配类型,bean属性可以 自动进行装配。而构造函数可以根据匹配类型自动装配。你甚至可以设置自动装配进行自动侦测,这样Spring替你就会选择一个合适的机制。请看下面的例 子: Spring 可以通过bean类的自省来实现自动装配依赖,这样的话你就不必明确地描述bean的属性或者构造函数的参数