1、Rest 参数 与 Spread 操作符

  当我们在代码中遇到“..."时,它不是Rest参数就是Spread操作符

  区分方法:

  若...出现在函数的参数列表,那它表示的就是Rest参数,它会把函数多余的实参收集到一个数组中。

 1 function sumAll(...args) { // 数组变量名为 args
2 let sum = 0;
3
4 for (let arg of args) sum += arg;
5
6 return sum;
7 }
8
9 alert( sumAll(1) ); // 1
10 alert( sumAll(1, 2) ); // 3
11 alert( sumAll(1, 2, 3) ); // 6

  若... 出现在函数调用或类似的表达式中,那么它就是Spread操作符,它会把一个数组展开为逗号分隔的元素列表。

1 let arr = [3, 5, 1];
2
3 alert( Math.max(...arr) ); // 5(Spread 操作符把数组转为参数列表)
1 let str = "Hello";
2
3 alert( [...str] ); // H,e,l,l,o

2、旧时的“var”

  “var”没有块级作用域

 function sayHi() {
if (true) {
var phrase = "Hello";
let test = "aa"
} alert(phrase); // works
alert(test);//报错 test is not defined
} sayHi();
alert(phrase); // 报错:phrase is not defined

  “var” 在函数开头被处理

  

 function sayHi() {
phrase = "Hello"; alert(phrase); var phrase;
}
和下面等同
function sayHi() {
var phrase; phrase = "Hello"; alert(phrase);
} 或者代码块被忽略 function sayHi() {
phrase = "Hello"; // (*) if (false) {
var phrase;
} alert(phrase);
}
此时的变量仍可以被访问

3、全局对象

  概念:全局对象提供在任何地方使用的变量和函数。大多情况下,这些局部变量内置与语言或主机环境中。浏览器中它被命名为window。

  window 对象

  1)作为全局对象外,还有浏览器窗口功能,

  alert(window.innerHeight);//显示浏览器窗口高度

  window.open('http://www.baidu.com')//打开一个新窗口

  2)顶级var 变量和函数声明后自动成为window属性

  var x = 5;

  alert(window.x)//5 这样可以访问x

  但是 let/const 声明不会发生这种情况,因为这两个的声明不会给window 创建属性

  3) 正常情况下,所有脚本代码共享相同的全局作用域

 <script>
var a = ;
let b = ;
</script> <script>
alert(a); //
alert(b); //
</script>

  4)全局范围内 this 的值为 window

  alert(this);//window

  这样会可能导致命名冲突

  所以现在有了一个解决办法就是给 type设置 “module” 属性

//在一个模块中, var x 不会成为window属性
<script type="module">
var x = ; alert(window.x); // undefined
</script> //两个模块的变量彼此不可见
<script type="module">
let x = ;
</script> <script type="module">
alert(window.x); // undefined
alert(x); // 错误:未声明的变量
</script> //在模块中 this 的顶级变量为 undefined
<script type="module">
alert(this); // undefined
</script>

4、函数对象

  属性 “name"

 function sayHi() {
alert("Hi");
} alert(sayHi.name); // sayHi

  属性 "length"

  这个属性是用来返回函数传入参数的个数

  

function f1(a) {}
function f2(a, b) {}
function many(a, b, ...more) {} alert(f1.length); //
alert(f2.length); //
alert(many.length); //

  但是余参不参与计数

  自定义属性

 function sayHi() {
alert("Hi"); // 我们记录一下运行次数
sayHi.counter++;
}
sayHi.counter = ; // 初始值 sayHi(); // Hi
sayHi(); // Hi alert( `调用了 ${sayHi.counter} 次` ); // 调用了 2 次

  命名函数表达式

  1)这个名字允许在函数内部引用自己

  2)在函数外部是不可见的

 let sayHi = function func(who) {
if (who) {
alert(`Hello, ${who}`);
} else {
func("Guest"); // 使用 func 再次调用自己
}
}; sayHi(); // Hello, Guest // 但这个无法生效
func(); // Error, func is not defined(在函数外不可见)

javaScript 基础知识汇总(九)的更多相关文章

  1. JavaScript基础知识汇总

    1. 图片热区: <img src="logo.jpg" usemap="#logo"> <map id="logo" n ...

  2. javaScript 基础知识汇总(三)

    1.循环:while 和 for while 循环 while(condition){ //代码 循环体 } do ... while  循环 let i =0; do { //循环体 }while( ...

  3. javaScript 基础知识汇总(六)

    1.基本类型与对象的区别 基本类型:是原始类型的中的一种值. 在JavaScript中有6中基本类型:string number  boolean  symbol  null  undefined 对 ...

  4. javaScript 基础知识汇总(五)

    1.垃圾回收 JavaScript 的内存管理是自动的,不能强制执行或者阻止执行 可达性 JavaScript中主要的内存管理概念是可达性. 什么是可达性? 定义一个对象 let user = { n ...

  5. javaScript 基础知识汇总(二)

    1.运算符 术语或者叫法:一元运算符.二元运算符.运算元(参数) let x=0; x=5+2; //5和2为运算元,“+” 为二元运算符: x=-x; //"-" 为一元运算符 ...

  6. javascript 基础知识汇总(一)

    1.<script> 标签 1) 可以通过<script> 标签将javaScript 代码添加到页面中 (type 和language 属性不是必须的) 2)外部的脚本可以通 ...

  7. JavaScript 基础知识汇总目录

    一.标签.代码结构.现代模式.变量.数据类型.类型转换 GO 二.运算符.值的比较.交互.条件运算符.逻辑运算符 GO 三.循环 while 和 for .switch语句.函数.函数表达式和箭头函数 ...

  8. javaScript 基础知识汇总 (十三)

    1.Class 在JavaScript中 calss即类是一种函数 基本语法 class Myclass{ constructor(){} method1(){} method2(){} method ...

  9. javaScript 基础知识汇总(七)

    1.数组 特点:数组是可以存储有序集合的对象. 声明: let arr = new Array();   let arr=[]; 大多数情况下我们使用第二种. let fruits = [" ...

随机推荐

  1. Java判断字符串是否为空

    我们常常在实际开发调用一些类库,或者本身框架里面有类库去实现判断字符串空的操作,但是某些场景下上不是很方便去引入外部库的,所以需要我们自己去做这个工作,事实上判断空的操作不是很复杂,所以做个记录. 空 ...

  2. XP停止更新不用愁 瑞星XP护盾给你持续保护

    4月8日,微软正式结束了Windows XP的支持,所有XP系统将不会再收到来自微软提供的补丁和安全更新等服务,叱咤OS江湖十几年的一代操作系统终于完美谢幕.但谢幕不等于消失,据相关机构统计,虽然微软 ...

  3. Linux那些事——GTK+, Qt, Gnome, KDE, xWindow, xOrg区别

    Linux那些事--GTK+, Qt, Gnome, KDE, xWindow, xOrg区别 Linux不仅内核开源,系统配置也是高度可定制化的,其中就包括我们所熟知的图形界面,从桌面环境,主题,字 ...

  4. 解决jar包冲突

    参考文档: http://www.jianshu.com/p/100439269148 idea plugin: https://www.cnblogs.com/huaxingtianxia/p/57 ...

  5. MicrosoftOfficeProfessionalPlus2013傻瓜式激活工具

    用微软的office系列,总是提示需要输入秘钥,直接找个破解软件破解算了. 破解软件地址:http://www.3322.cc/soft/10037.html 1.下载解压: 2.点击office系列 ...

  6. C2C的道德边界:沦为从假运单到假病条的供假渠道

    你可能刚开始学会不去看网购平台上商品回评中的虚假好评,却又要开始应对同事在朋友圈等平台买来的虚开病假条带来的困扰.最近各大媒体包括党报热传的网购病假条事件,再度将人们的目光集中在这个C2C模式之上.从 ...

  7. vs2017 tfs服务器迁移更换服务器IP地址方法

    今天公司服务器换了IP地址,然后发现tfs的服务器删除不了,也添加不了.最后参考了其他vs版本提供的方法,找到了解决的方法. 一共需要修改两个地方: 1.找到项目的sln文件,使用其他文本编辑器打开, ...

  8. python爬虫之数据加密解密

    一.什么叫数据加密 数据加密是指利用加密算法和秘钥将明文转变为密文的过程. 二.数据加密的方式 1.单向加密 指只能加密数据而不能解密数据,这种加密方式主要是为了保证数据的完整性,常见的加密算法有MD ...

  9. 什么是HDFS?算了,告诉你也不懂。

    前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 上一篇已经讲解了「大数据入门」的相关基础概念和知 ...

  10. iOS 使用系统的UITabBarController 修改展示的图片大小

    1. 设置TabBarItem图片的大小 1 - (void)configurationAppTabBarAndNavigationBar { // 选中的item普通状态图片的大小 UIImage ...