附录A

名词解析:

const:声明常量,常量的值不能通过重新赋值来改变,并且在初始赋值后,不能重新声明、重新赋值了。 即:同一作用域中,常量名不能与其他变量或函数名重名。值也不能修改了。

“常量是块级作用域,很像使用let语句定义的变量。”

  1. 只读的常量,就是只能读一读,不可以通过赋值改变其值,也不可以在脚本运行时重新声明,他必须被初始化某个值。
  2. 作用域规则和let块级作用域变量相同,若省略const,则被视为变量。
  3. 在同一作用域中,不能使用与变量名或者函数名相同的名字来命名常量:很好理解,常量设定后就不能变了,你若与变量名字相同,常量和变量功能不同,你让人家js把你设定的常量当常量还是变量?变量是可以改变的,你名字相同相当于改了第一个设了此名字的变量,但是常量不能改,所以就不能和别人一样。
  4. 如果常量是对象,那么对象的属性是不被保护的,就像变量对象一样,其属性是可以通过再次赋值进而被修改的。

let: 语句声明一个块级作用域的本地变量。

let和var 的区别:

var的变量只有函数作用域,let的变量还有语句块作用域的作用。

看师傅的图,一目了然:

1、块级作用域:任何一对花括号{}中的语句集属于一个块,在这之中定义的所有变量在代码块外都是不可见的。

(原理上是这样的,但是js不支持块级作用域,也就是在for循环中定义的i也能在函数调用的时候取到的一个现象解释、而且在一个函数中的任何位置定义的变量在该函数中的任何地方都是可见的。)

2、函数作用域:定义在函数中的参数和变量在函数外部是不可见的、js拥有函数作用域,所以在一个函数中定义的变量,当这个函数调用完后,变量会被立即销毁。

3、语句块:if、for等语句

4、包含函数:就是包含这个变量或者语句的函数

5、剩余参数:[rest arguments]语法形式是三个点后边跟一个标识符“...nums”,是一个数组,可以用数组的方法来操作。

  剩余函数与arguments的区别:

  arguments:是一个参数的集合,即使没有参数他也是一个集合,他只有length属性和索引值的方法,不能使用数组的方法

  rest arguments:(剩余参数)是一个数组,不管有几个参数。他除了length和索引的属性外,还能用数组的方法操作参数

6、分布参数:[spread arguments] 语法形式是在值得前面加三个点,在调用的时候使用:sum(...[1,2,3])-将数组作为分布参数传给了sum()函数。

  剩余参数与分布参数的区别:

  剩余参数在定义函数的时候使用,分布参数在调用函数的时候使用。

7、数组领悟:用一组符合某个条件的值来初始化数组;语法形式:array = [ value for each ( variable in values ) condition ];

  参数说明:

  value: 实际原来数组values中的值;

  for each:结构会循环values中的每一个值;

  variable:循环出来的每一个值将放在variable中;

  condition:可选条件,如果循环出来的值(放在variable中的)符合这个条件,就会被放在最终的数组array中。

这种写法就好像把if判断语句写成了三元表达式一样。同for循环的功能没有区别,但是写法上更加简洁。

 //原始数组

 var numbers = [0,1,2,3,4,5,6,7,8,9,10];

 //把所有元素复制到新数组

 var duplicate = [i for each (i in numbers)];

 //只把偶数复制到新数组

 var evens = [i for each (i in numbers) if (i % 2 == 0)];

 //把每个数乘以2 后的结果放到新数组中

 var doubled = [i*2 for each (i in numbers)];

 //把每个奇数乘以3 后的结果放到新数组中

 var tripledOdds = [i*3 for each (i in numbers) if (i % 2 > 0)];

数组领悟示例代码

javascript高级程序设计第三版  

JS-高程3(更新中...)的更多相关文章

  1. 【前端】Util.js-ES6实现的常用100多个javaScript简短函数封装合集(持续更新中)

    Util.js (持续更新中...) 项目地址: https://github.com/dragonir/Util.js 项目描述 Util.js 是对常用函数的封装,方便在实际项目中使用,主要内容包 ...

  2. js坑爹笔试题目汇总(持续更新中)

    把你的面试官问倒,你就是一个合格的面试者了,以下总结一些易错的js笔试题目,会持续更新中.欢迎关注 1,考察this var length = 10 function fn(){ alert(this ...

  3. 前端深入之js篇丨Array数组操作从入门到成神Up Up Up,持续更新中

    写在前面 随着前端深入的不断学习,发现数组这个数据结构在前端中有着相当大的存在感,由于我初学前端的时候并没有系统性的学习数组,所以我将通过这篇文章同你一起学习数组,希望我们能一起进步,学会熟练操作数组 ...

  4. js常见错误类型及chrome常见报错(更新中)

    ECMA-262 定义了下列 7 种错误类型: 1.Error 错误 2.EvalError 全局错误 eval函数没有正确执行 3.RangeError 范围错误 4.ReferenceError ...

  5. 吃透Javascript数组操作的正确姿势—再读《Js高程》

    Javascript中关于数组对象的操作方法比较多也比较杂,正好再次捡起<Javascript高级程序设计>来读,把它们一一总结梳理了一下: 方法类别 方法名称 方法描述 参数 返回值 备 ...

  6. 《JS高程》创建对象的7种方式(完整版)

    一.理解对象 ECMA-262定义对象:无序属性的集合,其属性可以包含基本值.对象或者属性. 我们可以把 ECMAScript 的对象想象成 散列表:无非就是一组 名值对,其中值可以是数据或函数. 创 ...

  7. 《JS高程》事件学习笔记

    事件:文档或浏览器窗口中发生的一些特定的交互瞬间,也即用户或浏览器自身执行的某种动作. -------------------------------------------------------- ...

  8. 《JS高程》JS-Object对象整理

    继上篇<JS高程>对象&原型笔记,对JavaScript中的Object对象进行了整理,梳理一遍~ 参考文章:详解Javascript中的Object对象 ------------ ...

  9. 【翻译】Ext JS 5.0.1 中的新功能

    原文:What's New in Ext JS 5.0.1 今天,我们很高兴的宣布Ext JS 5.0.1发布了!此维护版本基于Sencha社区的反馈做了一些改进.下面让我们来了解一下这些改变. 可访 ...

  10. AngularJS进阶(十二)AngularJS常用知识汇总(不断更新中....)

    AngularJS常用知识汇总(不断更新中....) 注:请点击此处进行充电! app.controller('editCtrl',['$http','$location','$rootScope', ...

随机推荐

  1. Eclipse里安装插件

    1.在eclipse中选择 help->install new software. 2.在work with 框中输入:Indigo - http://download.eclipse.org/ ...

  2. BusyBox inittab

    # /etc/inittab init(8) configuration for BusyBox## Copyright (C) 1999-2004 by Erik Andersen <ande ...

  3. 【安装Python环境】之安装Selenium2时报UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 12: invalid continuation byte问题

    问题描述: windows8.1系统,Python3环境安装Selenium2时报错,错误如下: ..... ..... File "F:\软件\python3.6.1\lib\site-p ...

  4. anroid 广播

    广播接收者(BroadcastReceiver)用于接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast().Context.sendOrderedBroa ...

  5. Laravel 多where组合

    $model=DB::table("user"); foreach($request as $value){ if($value->name){ $model->whe ...

  6. 关于只能上QQ而其他电脑软件(IE/优酷/腾讯视频...)不能联网的解决

    1.应该是Winsock协议配置有问题,所以进行一下重置工作. 开始-cmd-输入netsh winsock reset命令来重置Winsock目录重新初始化网络环境来恢复网络畅通-重启电脑才能生效 ...

  7. zebra/quagga线程分析

    /* 线程按照不同的功能进行分类.有6条双链,分别表示不同类型的线程.将要运行的时候, * 就从不同的链表中取出,添加到ready链表中,运行完成之后,将线程结构体清空放到 * unuse链表中.一般 ...

  8. Netstat命令(windows下)

    功能: 一般用于检验本机各端口的网络连接情况. 例子:检查本机3389远程连接端口是否可用 netstat -nao|find  "3389" 查看某进程使用的端口号: netst ...

  9. Building a Non-blocking TCP server using OTP principles

    转自:https://erlangcentral.org/wiki/index.php/Building_a_Non-blocking_TCP_server_using_OTP_principles ...

  10. 本来想用jsonp来跨域请求的,但sb写接口的,不改返回值。。。只得在后台请求接口了。。。

    string url = "ssss.com";//demo里的是get请求 HttpWebResponse w = HttpHelper.CreateGetHttpRespons ...