码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript的几个概念摘录。

时间:2018-12-29 23:26:25      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:syn   使用   use   处理   变量   pre   variable   oba   func   

ES201X是JavaScript的一个版本。

 

ES2015新的feature

新的声明类型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)

 

 

Hoisting

Declarations will be brought to the top of the execution of the scope!

?? var x = "hello" 这种声明加分配assign的写法无法Hoisting!!

函数声明也可以Hoisting.

 


Closures

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。

 

JavaScript的几个概念摘录。

标签:syn   使用   use   处理   变量   pre   variable   oba   func   

原文地址:https://www.cnblogs.com/chentianwei/p/10197813.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!