javaScript 基础知识汇总(九)
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 基础知识汇总(九)的更多相关文章
- JavaScript基础知识汇总
1. 图片热区: <img src="logo.jpg" usemap="#logo"> <map id="logo" n ...
- javaScript 基础知识汇总(三)
1.循环:while 和 for while 循环 while(condition){ //代码 循环体 } do ... while 循环 let i =0; do { //循环体 }while( ...
- javaScript 基础知识汇总(六)
1.基本类型与对象的区别 基本类型:是原始类型的中的一种值. 在JavaScript中有6中基本类型:string number boolean symbol null undefined 对 ...
- javaScript 基础知识汇总(五)
1.垃圾回收 JavaScript 的内存管理是自动的,不能强制执行或者阻止执行 可达性 JavaScript中主要的内存管理概念是可达性. 什么是可达性? 定义一个对象 let user = { n ...
- javaScript 基础知识汇总(二)
1.运算符 术语或者叫法:一元运算符.二元运算符.运算元(参数) let x=0; x=5+2; //5和2为运算元,“+” 为二元运算符: x=-x; //"-" 为一元运算符 ...
- javascript 基础知识汇总(一)
1.<script> 标签 1) 可以通过<script> 标签将javaScript 代码添加到页面中 (type 和language 属性不是必须的) 2)外部的脚本可以通 ...
- JavaScript 基础知识汇总目录
一.标签.代码结构.现代模式.变量.数据类型.类型转换 GO 二.运算符.值的比较.交互.条件运算符.逻辑运算符 GO 三.循环 while 和 for .switch语句.函数.函数表达式和箭头函数 ...
- javaScript 基础知识汇总 (十三)
1.Class 在JavaScript中 calss即类是一种函数 基本语法 class Myclass{ constructor(){} method1(){} method2(){} method ...
- javaScript 基础知识汇总(七)
1.数组 特点:数组是可以存储有序集合的对象. 声明: let arr = new Array(); let arr=[]; 大多数情况下我们使用第二种. let fruits = [" ...
随机推荐
- revit卸载/完美解决安装失败/如何彻底卸载清除干净revit各种残留注册表和文件的方法
在卸载revit重装revit时发现安装失败,提示是已安装revit或安装失败.这是因为上一次卸载revit没有清理干净,系统会误认为已经安装revit了.有的同学是新装的系统也会出现revit安装失 ...
- 史上最全Java面试题全集
2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对 ...
- 解决Eclipse和MyEclipsejava.lang.OutOfMemoryError Java heap space的错误
Eclipse和MyEclipse出现错误:java.lang.OutOfMemoryError: Java heap space的错误,很熟悉的错误信息,可咋就想不起来在哪里设JVM的参数啊.请看下 ...
- Hibernate中的对象图关系转换:游离、持久、自由状态
- 解决jar包冲突
参考文档: http://www.jianshu.com/p/100439269148 idea plugin: https://www.cnblogs.com/huaxingtianxia/p/57 ...
- 4K手机能拯救索尼手机吗?
智能手机屏幕分辨率究竟达到多少才是极限,一直是业内争论不休的问题.从低分辨率一路走来,直到iPhone 4搭载视网膜屏,业内才有了一个较为统一的认知:屏幕起码要在合适距离下看不到文字.图像虚影,才称得 ...
- 不装逼地说,在 Google 到底能学到啥?
不装逼地说,在 Google 到底能学到啥? 2017-03-17 PHP开发者 (点击上方蓝字,快速关注我们) 本文转自公众号「半轻人」(ID:ban-qing-ren),伯乐在线/PHP开发者已获 ...
- MFC中文件对话框类CFileDialog详解及文件过滤器说明
当前位置 : 首页 » 文章分类 : 开发 » MFC中文件对话框类CFileDialog详解及文件过滤器说明 上一篇 利用OpenCV从摄像头获得图像的坐标原点是在左下角 下一篇 Word中为 ...
- Jetson TX2镜像刷板法
使用Nvidia官方自带的脚本,备份镜像.恢复镜像,快速在新板子中部署DL环境 在之前的一篇博客中,详细介绍了使用JetPack刷系统以及使用离线包部署DL环境(cuda.cudnn.opencv.c ...
- Python sys.path详解
如何将路径“永久"添加到sys.path? sys.path是python的搜索模块的路径集,是一个list ['', 'C:\\WINDOWS\\system32\\python26.zi ...