一、循环
1、循环的目的:可以重复执行某些代码
2、for循环
格式:
for(初始化变量;条件表达式;操作表达式){
}
<script>
var str = '';
for (var i = 1; i <= 9; i++) {
for (var j = 1; j <= i; j++) {
str += (j + '*' + i + '=' + i * j) + ' ';
}
str += '\n';
}
console.log(str);
</script>
操作表达式主要目的更新变量
可以使用断点调试·
3、while循环
while(条件表达式)
{
}
<script>
var num = 1;
while (num < 10) {
console.log('nihao');
num++;
}
</script>
条件表达式结果为真执行循环体,否则不执行
4、do while循环
do{
}while(表达式)
do while先执行一次循环体,再判断,表达式结果为真,继续执行循环体,否则将退出循环
和while最大的区别,循环体至少执行一次
<script>
var i = 1;
do {
console.log('这个人今年' + i + '岁了');
i++;
} while (i <= 100);
var sum = 0;
for (var a = 1; a <= 100; a++) {
if (a % 7 == 0) {
continue;
}
sum += a;
}
alert(sum);
</script>
5、coutinue
跳出本次循环,继续下一次循环(只跳出本次循环,整个循环体还在)
6、break
跳出整个的循环体
二、数组
数组时一组数据的集合(存储在单个变量下)
2.1数组的创建方式
1、利用new创建数组
2、利用数组字面量创建数组(最常用)
var arr=[];
数组里的元素可以是任意类型
3.1数组的索引
用来访问数组元素的序号,下标从零开始,通过下标来访问
4、遍历数组
遍历:就是把数组的元素从头到尾访问一次
var arr=[]
for(var i=0;i<3;i++)
{
console.log(arr[i]);
}
<script>
var arr = [1, 2, 3, 5, 6, 6];
var sum = 0;
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
sum += arr[i];
}
var ave = sum / arr.length;
console.log(sum);
console.log(ave);
</script>
4.1数组长度
数组名.length(可以动态检测元素的个数,for循环种使用起来很好。)
写arr.length=5;会改变数组长度为5
<script>
var arr = [2, 6, 1, 77, 52, 25, 7];
var max = 0;
for (var i = 0; i <= arr.length; i++) {
if (max < arr[i])
max = arr[i];
}
console.log(max);
</script>
数组元素的默认值为undefined
新增时,对原来有值的进行再赋值,会对原来的元素进行替换(没有追加,有替换 )
5、冒泡排序
冒泡排序是一种简单的排序算法,它重复地走访要排序的数列,一次比较两个元素,如果他们顺序错误就把他们的顺序交换过来
<script>
var str1 = [5, 8, 3, 7, 1];
var tent;
for (var i = 0; i <= str1.length - 1; i++) {
for (var a = 0; a <= str1.length - 1; a++) {
if (str1[a] > str1[a + 1]) {
tent = str1[a];
str1[a] = str1[a + 1];
str1[a + 1] = tent;
}
}
}
console.log(str1);
</script>
三、函数
函数
1、诞生
在,js里面,可能会有定于非常多的相同功能或者功能相似的代码,重复次数太多
寒素:就是封装了一段可被重复调用执行的代码块
目的:让大量代码重复使用
<script>
function fn() {
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
fn(1, 2, 3, 4, 5);
function fn() {
console.log(arguments);//arguements展示形式是伪数组
}
fn(1, 2, 3);
</script>
1.1函数的使用
(1)function是声明函数的关键字,全是小写
(2)函数名一般是动词
(3)函数不调用不自己执行
调用函数记得加小括号
函数的封装就是把一个或多个功能通过函数的方式封装起来
建议实参和形参个数相匹配
2希望返回值返回给调用者
function 函数名(){
return 需要返回的结果;
}
3、函数返回值的注意事项
3.1、return之后的代码不再执行
return一次只能返回一个值,加逗号会返回最后的
<script>
function isRunnian(year) {
var flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
flag = true;
}
else {
flag = false;
}
return flag;
}
console.log(isRunnian(2024));
</script>
可以用数组输出多个值
我们的函数如果有return则返回的是return后面的值,函数没有return值就返回undefined
break:结束当前的循环体
continue:跳出本次循环,继续执行下次循环
return:不仅可以退出循环,还能够返回return语句的值,同时还可以结束当前的函数
4、arguements的使用
当不确定有多少个参数传递的时候,可以用arguements来获取。在js中它是当前函数的一个前置对象。所有的函数都内置了一个agruments对象,其包含所有的实参。
<script>
function fn() {
var max = arguments[0];
for (var i = 0; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}
console.log(fn(1, 2, 3));
</script>
4.1、arguements伪数组,并不是真正意义上的数组
(1)具有数组的length属性
(2)按照索引的方式进行存储
(3)他没有真正数组的一些方法
4.2
函数是可以相互调用的
四、作用域
1、作用域
全局变量与局部变量,js现在没有块级作用域{},比如if{},for{},所以现阶段js在{}里面写的变量,外面都可以使用。之后就不可以用。
2作用域链
内部函数访问外部函数的变量,采取的是链式查找的方式来决定取哪个值,这种结构被称为作用域链:就近原则。
<script>
var num=10;
function fn(){
num=20;
function fun(){
console.log(num);
}
fun()
}
fn()
</script>
五、js预解析
1.变量提升,就是把所有的变量声明提升到当前作用域的最前面,不提升赋值操作
2.函数提升,就是把所有的函数声明提升到当前作用域的最前面,不调用函数
var a=b=c=9;相当于var a=9;b=9;c=9;