标签:syn 使用 use 处理 变量 pre variable oba func
ES201X是JavaScript的一个版本。
新的声明类型let, const,配合Block Scope。(if, forEach,)
之前:
var, Global scope和function scope。
之后:
let, const , 这2个类型声明用在Block Scope内。
let, const只能声明一次。但var声明可以反复声明:
const num = 5; const num = 7; // SyntaxError: identifier ‘num‘ has already been declared var x = 2; // x = 2 var x = 4; // x = 4
const 用于不会改变的值。
??const x = {} , 可以改变其内的属性值,或增加新的key/value对儿。
这是因为,const variables当处理arrays 或objects时会改变,
技术上讲,不是再分配一个新的值给它,而是仅仅改变内部的元素。
const farm = []; farm = [‘rice‘, ‘beans‘, ‘maize‘] // TypeError: Assignment to constant variable //但可以 farm.push(‘rice‘)
Declarations will be brought to the top of the execution of the scope!
?? var x = "hello" 这种声明加分配assign的写法无法Hoisting!!
函数声明也可以Hoisting.
lexical or function closures.
用于把函数和周围的state(var, const, let声明的变量,函数。)绑定一起使用。
换句话说,closure给你入口进入到函数作用域外面的区域,并使用这个区域的变量,函数。
function jump() { var height = 10; function scream() { console.log(height); } return scream; } var newJump = jump() //function runs but doesnot log anything newJump(); //logs 10
在函数jump中声明了height, 它只存在于函数作用域内。
通过Closure, 函数scream得到了height。
执行函数jump, 并把函数scream存入一个新的变量newJump, 这个newJump就是一个函数
执行newJump(), 就是执行scream。 而scream可以引用jump内的height。
JavaScript所做的是保持一个对原始作用域的引用,我们可以使用它和height变量。
这个引用就叫做closure。
另一个例子:
function add (a) { return function (b) { return a + b }; } // use var addUp7 = add(7) var addUp14 = add(14) console.log (addUp7(8)); // 15 console.log (addUp14(12)); // 26
addUp7和addUp14都是closures。
例如:
addup7创造了一个函数和一个变量a。a的值是7。
执行addUp7(8), 会返回a + 8的结果15。
标签:syn 使用 use 处理 变量 pre variable oba func
原文地址:https://www.cnblogs.com/chentianwei/p/10197813.html