辞别迁延症,明天开始更新ES6-ES10罕用的所有新个性,仅作为学习笔记,勿喷。
目录
ECMAScript
- ECMAScript概述
- ES2015概述
- 新个性的分类
作用域
- 全局作用域
- 函数作用域
- 块级作用域(ES6新增)
- 动静作用域
- ES6-ES10学习幅员
ECMAScript
ECMAScript概述
- ECMAScript通常看做JavaScript的标准化标准,实际上JavaScript是ECMAScript的扩大语言。ECMAScript只是提供了最根本的语法。
JavaScript = ECMAScript + BOM + DOM
- 2015年开始ES放弃每年一个版本的迭代,并且开始依照年份命名。
ES2015概述
- 相比于ES5.1的变动比拟大
- 自此,规范命名规定发生变化
- ES6泛指是2015之后的所有新规范,当前要看清楚是特指还是泛指
新个性的分类
- 解决原有语法上的一些问题或者有余
- 对原有语法进行加强
- 全新的对象、全新的办法、全新的性能
- 全新的数据类型和数据结构
作用域
- 全局作用域
- 函数作用域
- 块状作用域
- 动静作用域
对象 | 类型 |
---|---|
global/window | 全局作用域 |
function | 函数作用域(部分作用域) |
{} | 块状作用域(if语句,for语句) |
this | 动静作用域 |
全局作用域
在全局应用var定义的变量为全局变量
案例一:
var abc = 1234abcd = 2345delete abc //falseconsole.log(abc) //1234delete abcd //trueconsole.log(abcd) //abcd is not defined// abc是一个全局对象,然而abcd不是全局变量,而是作为window对象的属性存在的,// 然而因为window是全局对象,所以看上去它也具备全局属性,领有全局作用域
案例二:
function test(){ ab = 45}test()console.log(ab) //45//在函数外部没有应用var定义的变量,都挂载在window上,不是全局变量,然而领有全局作用域
函数作用域
在函数外部定义的变量,领有函数作用域/部分作用域
function test(){ var a = 3 return a + 4}console.log(test()) // 7 console.log(a) //a is not defined
如何让a在函数作用域中,然而某些值共享?
- return
- 闭包
块级作用域(ES6新增)
ES5
// ES5function test(){ var a = 3 if (a === 3) { var b = 4 console.log('abc') } else { console.log('abcd') } console.log(b) // 4 return a + 4}//在if的块中无奈造成壁垒,在{}中定义的变量在外界还是能够应用的//ES6将{}中的货色进行了独立function test () { var a = 3 function test2 () { var b = 4 return a + b } return test2}/* test外面的变量对test2是共享的,a的值是能够取到的。依据函数的作用域链:执行test2中的函数,首先定义b,而后return中找a,没有找到就去上一个函数中找,找到了a如果在test中找不到a,最初会始终找到window*/
ES6
function test(){ var a = 3 if (a === 3) { let b = 4 console.log('abc') } else { console.log('abcd') } console.log(b) // b is not defined return a + 4}// 如果想要应用块状作用域,然而此时不能用var,因为var有一个变量晋升机制。// 凡是看到了var,就会晋升到以后作用域最顶层,所以只能应用let,const
动静作用域
this 是十分非凡的关键词标识符,在每个函数的作用域中被主动创立。
只能在执行阶段能力决定变量的作用域。
window.a = 3function test () { console.log(this.a)}test() // 3test.bind({ a:100 })() // 100// 因为this是一个动静指向,不是固定指向。所以咱们称这个为动静作用域。// bind是让函数动静绑定到一个对象下来,这个时候this指向对象自身,所以会导致同一个函数有不同的成果。
词法作用域
- js采纳词法(动态)作用域,因而开启动静作用域请借助
bind
,with
,eval
等。 - bash采纳的是动静作用域
动态作用域 | 动静作用域 |
---|---|
变量的作用域是在定义时决定而不是执行时决定,个别通过动态剖析就能确定。 | 只能在执行阶段能力决定变量的作用域。 |
// 通过验证,js默认采纳动态作用域// a 在foo调用的时候没有在以后函数作用域中找到,所以依照书写代码程序往外层找,就是var a = 2,而不是取bar函数外面找function foo() { console.log(a) // 2}function bar() { var a = 3 foo()}var a = 2bar()