文章目录
2021/12/28
一、JavaScript
(1)数组
1.数组去重:
from()叠加new Set()方法
字符串或数值型数组的去重可以直接使用这个方法。
var arr = ['Saturn', 'Earth', 'Uranus', 'Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter'];
var uniquePlants = Array.from(new Set(plants));
console.log(uniquePlants); // [ 'Saturn', 'Earth', 'Uranus', 'Mercury', 'Venus', 'Mars', 'Jupiter' ]
(2)题目
1.日程安排
var weekday = window.prompt('请输入星期几');
var time = window.prompt('请输入输入上午,下午或晚上');
switch(weekday){
case'星期一':
if(time=='上午'){
alert('看书');
} else if(time=='下午'){
alert('逛街');
}else if(time=='晚上'){
alert('跳舞');
}
break;
}
if(weekday=='星期二'){
if(time=='上午'){
alert('学习');
}else if(time=='下午'){
alert('睡觉');
}else if(time=='晚上'){
alert('打游戏');
}
}
2.斐波那契数列
前两位是确定的,n3 = n2 + n1
过程:
循环的时候取个变量n,n3 = n2 + n1;每一次循环完之后得出n3,但是没有到n位,移动一下。
第二循环的时候,把n2的值赋给n1, n3的值赋给n2,然后n3的值= n1 + n2;
循环 | n1 | n2 | n3 | |||
---|---|---|---|---|---|---|
第二次 | 1 | 1 | 2 | 3 | 5 | 8 |
第三次 | n1 | n2 | n3 | |||
第四次 | n1 | n2 | n3 | |||
第五次 | n1 | n2 | n3 |
var n = parseInt(prompt('请输入第几位'));
if(n<=0){
console.log('输入错误');
}
else if(n<=2){
console.log(1);
}
else{
var n1 = 1,
n2 = 1,
n3 ;
for(var i=2;i<n;i++){ //从第三位开始求的,第一位,第二位n3都是确定的(1),所以i=2;
//当n=5得时候i=2 ,3, 4, 到第五次的时候i=5<5(false)
n3 =n1 + n2;
n1 = n2;//三个n向后移动,即后面赋值给前面
n2 = n3;
}
console.log(n3);
}
(3) 函数基础
x,y 任意x 确定的Y x自变量 y->x函数
y=f(x) f就是function 函数值是确定的
计算机函数(函数式编程)
test类似y=f(x)的y; a,b,c类似x
1.声明
function是函数关键字,声明一个test的函数
test是函数名
function test(a,b,c) { //test类似y=f(x)的y; a,b,c类似x的值
}
先声明了b,然后把1赋值给b,然后又声明了a,把b的1赋值给a
function test(){
// var a = b =1;
//var b =1;//这么写是在里面声明局部变量
//b = 1; 挂载到window上了,是一个全局变量了
console.log(a,b);
}
test();
console.log(a);//null
console.log(b);//1
var b=1;
在块级作用域内如函数内部的是局部变量不能挂载到window,在外面是全局变量可以挂载到window。
b=1;
在任意位置都是全局变量,都会被挂载到window
2.表达式 字面量
1.需要test()调用函数才能输出
var test = function test(){
var a = 1,
b =2;
console.log(a,b);
}
test();
2.为什么执行test1()
会报错呢
**解释:**实际上,声明了一个变量把函数赋给它的时候,就是付给了它一个函数的功能,调用test()
这个方法的时候,可以正确的执行。 当一个表达式给test赋值时,他是会自动忽略test1
,,是看不到test1的(不可见),这个写与不写都不影响函数的执行就是可以写成var test =function(){}
而test才是真正在外部调用函数的
var test = function test1(){
var a = 1,
b =2;
console.log(a,b);
}
console.log(test.name);//test1
test1();//报错
2.但是写了test1,也不是没有作用 :
可以在函数的内部调用的,外部不可见。
递归
var test = function test1(){
var a = 1,
b =2;
console.log(a,b);
test1();//在这里执行test1,会 无限循环执行
}
console.log(test.name);//test1
test();
3.匿名函数
当用表达式去定义函数的时候,后面的函数是匿名函数
这种定义函数的方式就叫:匿名函数表达,或者叫函数字面量
var test = function(){ //匿名函数
var a = 1,
b =2;
console.log(a,b);
}
test();
字面量是什么,比如var a =10;
10就是字面量,或者var arr=[]
数组字面量。
函数字面量就是function(){}
包含里面的内容,即赋值给test 的这个值就是函数字面量
3.函数的组成部分
function 函数名 参数(可选){} 可以没有返回值()但是要有返回 return是必须要有的
下面代码没写return的原因是:
函数执行到最后一行,系统会自己增加一条return语句,并不是没有,是系统增加的
var test = function(){ //匿名函数
var a = 1,
b =2;
console.log(a,b);
//return;
}
test();
4.命名规则
1.不能数字开头
2.可以字母_$
3.包含数字
4.小驼峰命名法 复合单词myWonderfulTest(第一个小写,后面单词首字母都大写)
5.按照公司规范来,如某些公司写my_Wonderful_Test
5.高内聚,低耦合
耦合
(各个代码块,重复的代码太多了,代码重复率太高了)
计算机追求:高内聚,低耦合 -> 模块的单一责任制(希望独立完成,不依赖其他模块)
高内聚
:开发一个功能(一个模块),代码相关性强(内部的代码,紧密联系度比较强->模块(功能)独立性强)。
我们希望一个模块,他能够独立的去完成一个任务,任务完成的好坏,是跟高内聚有关系的
低耦合
:把重复的代码给抽象出来,就是提取出来,组成一个独立的功能体,或者是一个模块,去完成一个特定的功能。
高内聚,低耦合的目的:让一个功能体,一个代码块或者说模块,它有强的功能性,高的独立性,
也就是说,它放在哪里,我要用的时候,直接可以抽取它出来,然后直接去调用它就可以。
1.如下面就是耦合的例子
if(1){
for(var i =0;i<10;i++){
console.log(i);
}
}
if(2>0){
for(var i =0;i<10;i++){
console.log(i);
}
}
if(3>0){
for(var i =0;i<10;i++){
console.log(i);
}
}
2.解耦合:
基于函数
if(1){
test();
}
if(2>0){
test();
}
if(3>0){
test();
}
function test(){
for(var i =0;i<10;i++){
console.log(i);
}
}
6.函数例题
1.一次性输入一串数字,输出最大值
var nums =prompt('请输入数字,用逗号隔开');
var arr2 =nums.split(',');//在arr数组里面存入用户数据,定义分隔符
//var arr2=[];//定义另一个空数组
//for(i=0; i<arr.length;i++){ //遍历arr中的数组下表
// arr2.push(parseInt(arr[i]));//arr2数组一个个把数据(用户输入的一串在arr数组里面的值)取出来
// }
function fn(arr2){
var max=arr2[0];//定义一个初始最大值,遍历arr2数组中的数据,从第一位到最后
for(var i=0;i<arr2.length;i++){ //遍历arr2的数组下标
if(max<arr2[i]){ //将max与arr数组中的数字按下标顺序一个个进行比较
max = arr2[i]; //遇到数组中比自己大的就将大的值赋给max
}
}
alert(`最大值为${max}`);
}
fn(arr2);//调用函数,将arr2数组里的参数一个个传过来
注意:
在JS中想要使用${}获取变量 要在 ``中使用不是单引号
类似于c语言中printf("最大值为%d\n",max);