通过两个下标(索引)来锁定一个元素,是一维数组的叠加
var info = new Array(
new Array('刘备','男',23),
// 第一行
new Array('张飞','男',24),
// 第二行
new Array('关羽','男',25),
// 第三行
)
数组名[下标1][下标2]
默认:按照行优先,第一个下标是行下标,第二个下标是列下标
var str = ''
for(var i=0;i
练习:求一个3*4的二维数组的每行元素之和
var arr =[
[10,20,30,40],
[1,2,3,4],
[5,6,7,8]
]
console.log(arr)
for(var i=0;i
求每列元素之和
var arr =[
[10,20,30,40],
[1,2,3,4],
[5,6,7,8]
]
console.log(arr)
for(var i=0;i
求3*3对角线元素之和
var arr =[
[1,1,1],
[2,2,2],
[3,3,3]
]
console.log(arr)
var sum =0,sum2=0;
for(var i=0;i
var arr =[
[1,2,3,4],
[5,6,7,8],
[2,4,6,8]
]
var res=[];
for(i=0;i
求杨辉三角形
// 输出杨辉三角形
var info = new Array(7)
for(var i=0;i
求1!+2!+3!+...10!
var res=0;
var equ=1;
for(i=1;i<=10;i++){
for(j=1;j<=i-1;j++){
equ=j*i;
}
res+=equ;
}
console.log('1!+2!+3!+...+10!=',res);
插入一个数并按照大小排序
计算a+aa+aaa+aaaa+aaaaa
var a=prompt('请输入一个整数:')
var n=prompt('请输入位数:')
var t=a;
var sum=0;
var str='';
while(n>0){
str+=t+'+'
sum+=t;
t=t*10+a;
n--;
}
str+='='+sum
console.log(str)
可以实现某种功能的代码块,可以重复使用
声明函数:
function 函数名([参数])
{
函数体语句
}
1.function是关键字
2.’函数名‘是标识符
3.函数可以有参数,也可以没有参数(无参函数),也可以有多个参数,()不能能省略
4.{}表示函数的作用范围,不能省略
函数调用
function getSum() //无参函数
{
var sum = 0;
for(i=1;i<100;i++){
sum+=i;
}
return sum;
}
var s=getSum(); //函数调用:从调用开始执行函数
console.log('1+2+3+...+100=',getSum())
函数分类
1.有返回值函数
function 函数名(){
return 需要返回的结果;}
函数名();
函数名()= return后面需要返回的结果
终止函数,后面的内容不会被执行
返回的结果是最后一个值,如果要返回多个值,可以用return返回一个数组
2.无返回值函数
通常只实现某种功能
function 函数名(形参1,形参2..){
}
函数名(实参1,实参2..)
实参把值传递给形参,单向传递
函数的参数可以有,也可以没有,个数不限,可以是数字、字符、数组
用变量接受函数的返回结果
函数声明方式
1.命名函数
function 函数名 ([参数]){}
函数名()
2.函数表达式(匿名函数)
var 变量名 = function (){}
变量名()
var fn=function(aru){ console,log('我是函数表达式'); console.log(aru); } fn('pink'); //函数表达式也可以传递参数
//用函数反转数组 reverse反转 function reverse(arr){ var newArr=[] for(var i=arr.length;i>0;i++){ newArr[newArr.length]=arr[i]; } return newArr } var arr1=reverse([1,2,3,4,5]) console.log(arr1) var arr2=reverse(['pink','yellow','blue']) console.log(arr2)
//函数封装冒泡排序 sort排序 function sort(arr){ for(var i=0;i
arr[j+1]){ var temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } return arr; } var arr1=sort([1,2,4,9]); coonsole.log(arr1) //函数判断闰年 function isRunYear(year){ //如果是闰年返回true,否则返回false var flag=false; if(year%4==0&&year%100!=0||year%400==0){ flag=true; } return flag; } console.log(isRunYear(2008)); console.log(isRunYear(2007));
//函数可以调用另一个函数 function fn1(){ console.log(11); fn2(); //在函数fn1里调用了fn2 } fn1(); function fn2(){ console.log(22); }
//输出二月份的天数 function backDay(){ var year = prompt('请输入年份:'); if(isRunYear()){ alert('当前年份是闰年2月有29天'); } else{ alert('当前年份是平年2月28天'); } backDay; //函数判断闰年 function isRunYear(year){ //如果是闰年返回true,否则返回false var flag=false; if(year%4==0&&year%100!=0||year%400==0){ flag=true; } return flag; }
// 把二维数组用字符串显示
function showArray(arr){
// arr为形式参数,占位符
var str='';
for(i=1;i
练习:判断一个数是否是素数,输出1-100以内的素数
//定义判断素数的函数:形参的设置和函数返回值的使用
function getSushu(num){
var flag=true;
for(i=2;i<=num;i++){
if(n % i==0){
flag=false;
break;
}
return flag;
}
}
//函数调用:输出一百以内的素数
for(k=1;k<=100;k++){
if(getSushu(k)){
console.log(k);
}
}
定义一个函数,判断是否是水仙花数,输出一千以内的所有水仙花数
function shuiXh(num){
var flag=true
if(1000>num>100){
a=parseInt(num/100)
b=parseInt(num/10%10)
c=parseInt(num%10)
}
if(num!=a*a*a+b*b*b+c*c*c){
flag=false;
}
return flag
}
for(i=100;i<=1000;i++){
if(shuiXh(i)){
console.log(i)
}
}
内聚:模块内部结合的紧密程度
耦合:模块之间结合的紧密程度
高内聚,低耦合
关于函数参数:形参和实参的个数可以不同
实参个数大于形参个数 多余实参会被忽略
实参数量小于形参,多于形参没有值,undefined,NaN
arguments的使用:定义函数时,函数有一个隐含的内置对象arguement,保留了函数调用时传递的所有实参
具有数组的length属性,按照索引的方式存储的,可以实现遍历,伪数组
function fn(){
// 定义函数,没有参数
console.log(arguments)
// 输出调用函数时传递的所有形参
console.log(arguments.length)
// arguments是一个数组
console.log(arguments[2])
// 输出第三个实参
}
fn(11,22,33)
磁盘操作系统
目录:对应windows下面的文件夹
简单的dos指令
1.目录转换:cd 目录名
cd\:退回根目录 cd..:返回上一级目录
2.查看当前目录下的文件将或文件夹:dir
dir/p:分屏显示文件和子目录 dir/w:宽屏形式文件和子目录 []里面是文件夹
.:表示当前文件夹 ..:表示当前文件夹的上一级文件夹
3.创建目录(新建文件夹):md 目录名
4.删除目录(删除文件夹):rd 目录名 //被删除的文件夹不能有子目录,为空
语法和js基本一致,搭建了js的运行平台,js不依赖浏览器,直接通过nide编译运行
利用函数找数组中的最大值
function getMax(){
var max = arr[0]
for(i=1;i
利用return终止函数
function getMax(num1,num2){
if(typeof num1!='number'||typeof num2!='number'){
return NaN
}
return num1>num2?num1:num2
}
var n=getMax(22,'23')
console.log('Max=',n)
利用函数输出数组
function getResult(num1,num2){
return[num1+num2,num1-num2,num1*num2,num1/num2]
}
var a=getResult(5,7)
console.log(a)
利用函数反转数组元素
function reverse(arr){
var i=0;
var j=arr.length-1;
while(i
把函数的值赋给一个变量,通过变量完成对函数的定义、调用、参数传递
var 变量名=function[(参数)]{
函数体语句
}
var sum=function(n,m){
//将匿名函数赋值给变量,通过变量调用该函数
var s=0;
for(var i=m;i<=n;i++){
s+=i
}
return s
}
console.log('函数表达式:',sum(1,100))
把一个函数a作为参数传递给一个函数b,在函数b的函数体内调用函数a,把a叫回调函数
function a(num1,num2,fn){
//fn表示函数
return fn(num1,num2)
//调用函数,num1和num2作为参数
}
var t=a(12,23,function(a,b)
//function为回调函数
{
return a+b
}
);
var k=a(23,34,function(a,b){
return a*b
}
);
console.log(t)
console.log(k)
函数自己调用自己
用递归解决问题的前提条件a.问题可以分解:将复杂问题分解成简单问题b.分解后新问题的解决办法和老问题一样c.分解过程有明确的结束条件,不是无限循环
1.自上而下分解问题
2.自下而上回溯得到问题的解
入栈 出栈
//求阶乘的函数
function fun(n){
//计算n!
if(n==1||n==0){
//递归地结束条件
return 1
}
else{
return n=n*fun(n-1)
//递归调用:函数自己调用自己
}
}
用递归函数实现斐波拉契数列
function fib(n){
if(n===1||n===2){
return 1
}
//第一二项返回1
else{
return fib(n-1)+fib(n-2)
}
//从第三项开始,每一项等于前两项之和
}
var str=''
for(var i=1;i<10;i++){
str +=fib(i)+'\t'
}
console.log(str)
用函数递归计算1+2+3+...+100
function sum(n){
if(n===1){
return 1
}
else {
return n+=sum(n-1)
}
}
console.log('1+2+3+...+100=',sum(100))
用递归打印一个整数的每一个数字
function res(n){
if(n>10){
res(parseInt(n/10))
}
console.log(parseInt(res(n%10)))
}
res(1024)
汉诺塔挪盘子
猴子吃桃子 每天吃一半多一个,第十天剩一个
作用域:作用范围
代码名字在某个范围内起作用和效果,为提高程序可靠性,减少命名冲突,可以分为全局作用域和局部作用域
全局变量:在函数外部定义的变量、在函数内部省略var定义的变量,作用范围整个作用域
局部变量:在函数内部使用var关键字声明的变量,之在函数内部有效
区别:全局变量比较占用内存资源,局部变量比较节约内存资源
块级变量:在ES6(ECMASCRIPT6)标准中,用户用let声明的变量,只在语句块中生效
var arr=[1,2,3,4,5,6]
var str=''
for(let i=0;i
作用域链:
内部函数访问外部函数的变量,采用链式查找的方法来决定取哪个值,就近原则
在一个函数内部声明另一个函数时,内层函数只能在外层函数作用域内执行,在内层函数执行过程中,若需要引入一个变量,首先在当前作用域内寻找若未找到在上一层作用域内找直到全局作用域(链式查找)
var s=0
function text(){
var t=1
var fun=function(){
t++
s+=t
}
fun()
}
text()
console.log(s)
闭包函数:简称闭包,指的是有群访问另一个函数作用域内的变量(局部变量)
作用:可以在函数外部读取函数内部的变量,可以让函数内部局部变量的值始终保存在内存中
function fn(){
var times =0
// 局部变量:作用于times函数
var c=function(){
// 函数表达式:闭包,在它的内部访问了fn函数的局部变量times
return ++times
}
return c
//返回的是闭包函数
}
// var cannot = fn()
// //函数表达式
console.log('第一次调用:',fn())
console.log('第二次调用:',fn())
闭包的优缺点
闭包在作用域链中的体现
立即调用匿名函数
格式:
(function([参数])
{
函数体语句
})()
(
function(){
var sum=0
for(let i=1;i<=100;i++){
sum+=i
}
console.log('1+2+3+...+100=',sum)
}
)()
定义函数,计算表达式的值
2/1 3/2 5/3 8/5 13/8 21/13...数列前二十项的值
(
function(num){
var sum=0;
var f1=1,f2=1;
var fn;
for(var i=1;i<=18;i++){
fn=f1+f2;
f1=f2;
f2=fn;
num=(f2)/(f1);
sum+=num;
}
console.log('此数列前二十项之和为',sum)
})()
(
function(){
var a=2,b=1,c
var sum=0;
var str=''
for(let i=1;i<=20;i++){
str+=(a+"/"+b+"+")
sum+=a/b
c=a+b
b=a
a=c
}
str+='='+sum
console.log(str)
})()