作用域

js中的变量提升和函数提升

↘锁芯ラ 提交于 2020-01-14 11:51:43
1、在js中只有两种作用域 a:全局作用域 b:函数作用域 在ES6之前,js是没有块级作用域。 首先来解释一下什么是 没有块级作用 域? 所以此时 是可以打印输出变量a的值。 2、什么是变量提升? 在我们的js中,代码的执行时分两步走的(1、预解析 2、一步一步执行): 1.预解析阶段:首先会在 全局作用域 内,js解析器会找所有的 var 、function 、参数 ,并提前到当前作用域的最顶上去( 变量的赋值操作不会提前,还在原来的地方 ),此时并没有执行代码。 2.一步一步执行代码。在一步一步执行代码的阶段遇到了函数调用,于是进入到函数作用域内,又开始分两步骤走(1、预解析 2、一步一步执行)。以此类推。 那么变量提升就是变量声明会被提升到作用域的最顶上去 ,也就是该变量不管是在作用域的哪个地方声明的,都会提升到作作用域的最顶上去。 即变量可以在声明之前使用,值为 undefined 。 那么上面这种写法其实等价于下面这种写法: 看几个例子: A:全局作用域和函数作用域都定义某变量 B:把上面的例子稍作改动(全局作用域定义某变量,函数作用域不定义只使用该变量),结果就会大不一样: C:再看一个例子(全局作用域和块级作用域都定义某变量,实际上ES6前没有块级作用域): 3、什么是函数提升? 3.1、函数声明式定义函数: 输出的结果是: 注意:函数声明式

JS 之 引擎运行原理

一个人想着一个人 提交于 2020-01-14 11:06:13
今天跟大家分享下JS 之 引擎运行原理的知识。 1 一些名词 JS引擎 — 一个读取代码并运行的引擎,没有单一的“JS引擎”;,每个浏览器都有自己的引擎,如谷歌有V。 作用域 — 可以从中访问变量的“区域”。 词法作用域— 在词法阶段的作用域,换句话说,词法作用域是由你在写代码时将变量和块作用域写在哪里来决定的,因此当词法分析器处理代码时会保持作用域不变。 块作用域 — 由花括号{}创建的范围 作用域链 — 函数可以上升到它的外部环境(词法上)来搜索一个变量,它可以一直向上查找,直到它到达全局作用域。 同步 — 一次执行一件事, “同步”引擎一次只执行一行,JavaScript是同步的。 异步 — 同时做多个事,JS通过浏览器API模拟异步行为 事件循环(Event Loop) - 浏览器API完成函数调用的过程,将回调函数推送到回调队列(callback queue),然后当堆栈为空时,它将回调函数推送到调用堆栈。 堆栈 —一种数据结构,只能将元素推入并弹出顶部元素。 想想堆叠一个字形的塔楼; 你不能删除中间块,后进先出。 堆 — 变量存储在内存中。 调用堆栈 — 函数调用的队列,它实现了堆栈数据类型,这意味着一次可以运行一个函数。调用函数将其推入堆栈并从函数返回将其弹出堆栈。 执行上下文 — 当函数放入到调用堆栈时由JS创建的环境。 闭包 — 当在另一个函数内创建一个函数时,它

IntelliJ Idea 常用快捷键列表

元气小坏坏 提交于 2020-01-13 03:59:32
IntelliJ Idea 常用快捷键列表 Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关闭文件 Ctrl+[ OR ],可以跑到大括号的开头与结尾 Ctrl+F12,可以显示当前文件的结构 Ctrl+F7,可以查询当前元素在当前文件中的引用,然后按 F3 可以选择 Ctrl+N,可以快速打开类 Ctrl+Shift+N,可以快速打开文件 Alt+Q,可以看到当前方法的声明 Ctrl+P,可以显示参数信息 Ctrl+Shift+Insert,可以选择剪贴板内容并插入 Alt+Insert,可以生成构造器/Getter/Setter等 Ctrl+Alt+V,可以引入变量。例如:new String(); 自动导入变量定义 Ctrl+Alt+T,可以把代码包在一个块内,例如:try/catch Ctrl+Enter,导入包,自动修正 Ctrl+Alt+L,格式化代码 Ctrl+Alt+I,将选中的代码进行自动缩进编排,这个功能在编辑 JSP 文件时也可以工作 Ctrl+Alt+O,优化导入的类和包 Ctrl+R,替换文本 Ctrl+F,查找文本 Ctrl+Shift+Space,自动补全代码 Ctrl+空格,代码提示(与系统输入法快捷键冲突)

Eclipse快捷键

匆匆过客 提交于 2020-01-13 02:36:27
编辑 作用域 功能 快捷键 全局 查找并替换 Ctrl+F 文本编辑器 查找上一个 Ctrl+Shift+K 文本编辑器 查找下一个 Ctrl+K 全局 撤销 Ctrl+Z 全局 复制 Ctrl+C 全局 恢复上一个选择 Alt+Shift +↓ 全局 剪切 Ctrl+X 全局 快速修正 Ctrl1+1 全局 内容辅助 Alt+/ 全局 全部选中 Ctrl+A 全局 删除 Delete 全局 上下文信息 Alt+ ? Alt+Shift +? Ctrl+Shift+Space Java 编辑器 显示工具提示描述 F2 Java 编辑器 选择封装元素 Alt+Shift +↑ Java 编辑器 选择上一个元素 Alt+Shift +← Java 编辑器 选择下一个元素 Alt+Shift +→ 文本编辑器 增量查找 Ctrl+J 文本编辑器 增量逆向查找 Ctrl+Shift+J 全局 粘贴 Ctrl+V 全局 重做 Ctrl+Y 查看 作用域 功能 快捷键 全局 放大 Ctrl+= 全局 缩小 Ctrl+- 窗口 作用域 功能 快捷键 全局 激活编辑器 F12 全局 切换编辑器 Ctrl+Shift+W 全局 上一个编辑器 Ctrl+Shift+F6 全局 上一个视图 Ctrl+Shift+F7 全局 上一个透视图 Ctrl+Shift+F8 全局 下一个编辑器 Ctrl+F6

【你不知道的javaScript 笔记2】 javaScript 的作用域规则

别来无恙 提交于 2020-01-12 22:53:32
一、什么是词法作用域? 词法作用域是在定义词法阶段的作用域,就是由代码变量和作用域块写在哪里决定的,基本上词法分析器在处理代码时会保持作用域不变。 二、词法作用域特点 完全由写代码期间函数所声明的位置来定义 词法作用域查找只查找一级标志符(foo.bar.baz,只试图查找foo标志符) 三、如何运行时修改词法作用域? eval() function foo(str,a){ eval(str) //会修改foo函数的词法作用域 console.log(a,b)}var b = 2;foo('var b = 3;',1); // 1,3 在严格模式中eval(),有自己的词法作用域 with 中var声明会会被添加到with所处的作用域中,并未参数对象创建了一个全新的词法作用域 eval()和with 会在运行时修改作用域,这样破坏了js引擎在编译阶段根据词法进行静态分析的能力,所有大量的使用会影响代码性能 四、 javaScript 的作用域 函数作用域 函数作用域值属于这个函数的全部变量都可以在整个函数的范围内使用及复用。 函数表达式IIFE: (function foo(){})(),可用于防止污染全局作用域 全局作用域 块级作用域 with try/catch (ES3) let (ES6) const 五、总结 javaScript 遵循词法作用域规则

JavaScript 秘密花园 http://bonsaiden.github.com/JavaScript-Garden/zh/

五迷三道 提交于 2020-01-12 20:22:25
简介 JavaScript 秘密花园 是一个不断更新,主要关心 JavaScript 一些古怪用法的文档。 对于如何避免常见的错误,难以发现的问题,以及性能问题和不好的实践给出建议, 初学者可以籍此深入了解 JavaScript 的语言特性。 JavaScript 秘密花园 不是 用来教你 JavaScript。为了更好的理解这篇文章的内容, 你需要事先学习 JavaScript 的基础知识。在 Mozilla 开发者网络中有一系列非常棒的 JavaScript 学习 向导 。 译者注: 文中提到的 ES5 是 ECMAScript 5 的简写,是 ECMAScript 标准语言的下一版本,正在开发中。 JavaScript 是此标准语言的一个方言。 关于作者 这篇文章的作者是两位 Stack Overflow 用户, 伊沃·韦特泽尔 Ivo Wetzel (写作) 和 张易江 Zhang Yi Jiang (设计)。 贡献者 Caio Romão (拼写检查) Andreas Blixt (语言修正) 中文翻译 三生石上 此中文翻译由 三生石上 独立完成, 博客园 首发,转载请注明出处。 许可 JavaScript 秘密花园在 MIT license 许可协议下发布,并存放在 GitHub 开源社区。 如果你发现错误或者打字错误,请 新建一个任务单 或者发一个抓取请求。

Spring中Bean的作用域

社会主义新天地 提交于 2020-01-11 19:08:57
先看一下官方提供的几种作用域 这里着重讲解singleton单例模式(Spring的默认机制)和prototype原型模式(每次从容器中get的时候都会是一个新的对象) 这里以代码的形式进行演示,首先创建一个User实体类 package com.zhiying.pojo; public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } } 然后是配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=

[The RUST Programming Language]Chapter 4. Understanding Ownership (1)

无人久伴 提交于 2020-01-11 15:19:38
Understanding Ownership What Is Ownership? 什么是所有权? Ownership Rules 所有权规则 Variable Scope 变量作用域 The `String` Type `String`类型 Memory and Allocation 内存分配 Ways Variables and Data Interact: Move 变量和数据的交互方法:移动 Ways Variables and Data Interact: Clone 变量和数据的交互方法:克隆 Stack-Only Data: Copy 栈数据:复制 Ownership and Functions 所有权和函数 Return Values and Scope 返回值和作用域 所有权是Rust最独特的一个特性,它可以让Rust在没有垃圾回收的情况下保证内存的安全性。因此,理解所有权在Rust中的工作原理是非常重要的。在本章中,我们将讨论所有权和几个与它相关的特性:借用、切片以及Rust如何在内存中存放数据。 What Is Ownership? 什么是所有权? Rust的核心特性是 ownership 所有权,尽管这个特性非常直白,易于解释,但它对Rust这门语言有非常深远的影响。 所有程序在运行时,都须要管理它们使用到的内存。有些语言有垃圾回收的机制

python学习笔记之初识函数

旧城冷巷雨未停 提交于 2020-01-11 14:35:15
初识函数 函数的定义 def my_len(s): #定义函数用def ,参数可写可不写 i = 0 for k in s: i += 1 return i #返回值 ret1 = my_len('今天也要努力工作呀') #传递参数:传参,实际参数,实参 ret2 = my_len([1,2,3,4,5]) #传递参数:传参 print(ret1) print(ret2) 函数的参数 定义函数的时候: 位置参数 : 直接定义参数 默认参数,关键字参数 :参数名 = '默认的值' 动态参数 : 可以接受任意多个参数 参数名之前加*,习惯参数名args,即*args 参数名之前加,习惯参数名kwargs,即kwargs 顺序:位置参数,*args,默认参数,kwargs 函数的返回值 返回值的3种情况: 1.没有返回值 —— 返回None 不写return 只写return:结束一个函数的继续 return None —— 不常用 2.返回1个值 可以返回任何数据类型 只要返回就可以接收到 如果在一个程序中有多个return,那么只执行第一个 3.返回多个值 用多个变量接收:有多少返回值就用多少变量接收 用一个变量接收: 得到的是一个元组 函数的注释 def func(): ''' 这个函数实现了什么功能 参数1: 参数2: :return: 是字符串或者列表的长度 ''' pass

第5章:作用域与可见性

不问归期 提交于 2020-01-11 13:47:09
5.1 作用域与可见性 定义 (1)作用域:是标识符的有效范围; (2)可见性:标识符是否可以引用 源由 用法 简单例子 详解 1、函数原型的作用域:其作用域始于"(",结束于")"; 2、块作用域:块是一对花括号括起来的一段程序单元;其块中声明的标识符,其作用域从声明处开始,直到块结束的右花括号; 3、类作用域:可以将类看成是一组有名成员的集合,除个别例外,类作用域作用于特定的成员名,类及其对象有特殊的访问和作用域规则; 如:类X的一个成员M,在X的任何一个没有重新声明变量M的函数成员中,都可以访问到M 4、文件的可见性:理解为全局变量就行,在整个文件中都起作用; 4、作用域可见性的一般规则: (1)标识符应声明在先,引用在后; (2)在同一作用域中,不能声明同名的标识符; (3)如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见; (4)对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见; 进阶例子收集 5.2 对象的生存期 定义 对象从产生到结束的这段时间就是它的生存期。在对象生存期内,对象将保持它的值,直到被更新为止; 源由 用法 简单例子 详解 1、静态生存期:生存期与程序的运行期相同,用关键字static表示; 2、 进阶例子收集 5.3 数据与函数 定义 数据+算法=程序设计