目录
JavaScript基础
创建数组的方式
下列创建数组的方式,错误的是()
A.var arr = new Array();
B.var arr = [];
C.var arr = new array();
D.var arr =[];arr.length = 3;
答案为:C.var arr = new array();
<script> //使用new Array()创建数组 var arr1 = new Array(); var arr2 = new Array("苹果","橘子"); //使用字面量来创建数组 var arr3 = []; var arr4 = ["苹果","橘子"]; </script>
数组中可以存放任意类型的元素
遍历数组
下列语句不能用于遍历数组的是()
A.for B.for...in C.for...of D.if
答案为:D.if
for of循环
<script> for(var item of arr){ console.log(item); } </script>
操作数组
添加元素
- push:从后添加
- unshift:从前添加
删除元素
- pop:从后删除
- shift:从前删除
解构赋值
表达式“[a,b] = [12,34,56]”执行后,变量b的值为:
答案为:34
传统方式:
<script> var arr = [1,2,3]; var a = arr[0]; var b = arr[1]; var c = arr[2]; </script>
解构赋值:
<script> [a,b,c] = [1,2,3]; </script>
二维数组
执行代码:
var nums = [[2,4],[6,9]]; console.log(nums[1][0]);
输出结果正确的是()
A.2 B.4 C.6 D.9
答案为:C.6
<script> //使用Array创建数组 var info = new Array( new Array('Tom',13,155), new Array('Jack',11,152) ); console.log(info[0]); //输出结果:(3) ['Tom', 13, 155] console.log(info[0][0]); //输出结果:Tom //使用“[]”创建数组 var nums = [[1,2],[3,4]]; console.log(nums[0]); //输出结果:(2) [1, 2] console.log(nums[1][0]); //输出结果:3 </script>
编辑
JavaScript函数
函数的使用
执行代码:
<script> function info(){ year = 1999; }; info(); console.log(year); </script>
的结果是_____。
答案为:1999
函数的声明和调用
<script> //声明函数 function sayHello(){ console.log('hello'); }; //调用函数 sayHello(); </script>
作用域
JavaScript中函数的作用域分为全局作用域、______和块级作用域。
答案为:函数作用域
①全局变量:不在任何函数内声明的变量(显式定义)或在函数内省略var声明的变量(隐式定义)都称为全局变量,它在同一个页面文件中的所有脚本内都可以使用。
② 局部变量:在函数体内利用var关键字定义的变量称为局部变量,它仅在该函数体内有效。
③块级变量:ES 6提供的let关键字声明的变量称为块级变量,仅在“{}”中间有效,如if、for或while语句等。
函数表达式
使用_____方式定义函数时,要考虑函数定义和执行的顺序。
答案为:函数表达式
函数表达式是将声明的函数赋值给一个变量,通过变量完成函数的调用和参数的传递。
<script> var sum = function(num1,num2){ //函数表达式 return num1 + num2; }; console.log(sum(1,2)); //调用函数,输出结果:3 </script>
函数表达式与函数声明的定义方式几乎相同,不同的是函数表达式的定义必须在调用前,而函数声明的方式则不限制声明与调用的顺序。
可变参数
下列选项中,可以用于获取用户传递的实际参数值的是()
A.arguments.length B.theNums C.params D.arguments
答案为:D.arguments
arguments是JS提供的内置对象,主要用于存储实际的参数列表,是一个伪/类数组对象。
//传统方式 arguments function sum(){ // console.log(arguments); var sum = 0; for(var i = 0; i < arguments.length;i++){ sum += arguments[i]; } return sum; } console.log(sum(10,20)); //30 console.log(sum(10,20,30)); //100 //ES6方式 ...参数 function sumPlus(...args){ var sum = 0; // console.log(args instanceof Array); //true for(var val of args){ sum += val; } return sum; } console.log(sumPlus(10,20,30,40)); //100 console.log(sumPlus(10,20,30,40,50,60,70,80,90,200));
预解析
JavaScript解析器在运行JavaScript代码的时候会进行预解析,也就是提前对代码中的var变量声明和function函数声明进行解析,然后再去执行其他的代码。
/* 解析顺序 var test; function test(x,y){ return x - y; } console.log(test); console.log(test(1,2)); test = function (x,y){ return x + y; } console.log(test); console.log(test(1,2)); */ console.log(test); console.log(test(1, 2)); var test = function (x, y) { return x + y; } console.log(test); function test(x, y) { return x - y; } console.log(test(1, 2));
闭包函数(了解)
在JavaScript中,内嵌函数可以访问定义在外层函数中的所有变量和函数,并包括其外层函数能访问的所有变量和函数。但是在函数外部则不能访问函数的内部变量和嵌套函数。此时就可以使用“闭包来实现”。
所谓“闭包”指的就是有权访问另一函数作用域内变量(局部变量)的函数。它最主要的用途是以下两点。
- 可以在函数外部读取函数内部的变量。
- 可以让变量的值始终保持在内存中。
需要注意的是,由于闭包会使得函数中的变量一直被保存在内存中,内存消耗很大,所以滥用闭包可能会降低程序的处理速度,造成内存消耗等问题。
console.log(((a,b)=>a*b)(6,2)); console.log("===了解:闭包函数==="); function test(){ var a = 1; //匿名函数 return function(){ return a++; } } var fun = test(); console.log(fun()); console.log(fun()); console.log(fun());
END