双重for循环概述
循环嵌套是指在一个循环语句中在定义一个循环语句的语法结构,例如在for循环语句中,可以再嵌套一个for循环,这样的for循环语句我们称之为 双重for循环。
双重 for 循环语法
for(外循环的初始;外循环的条件;外循环的操作表达式){ for(内循环的初始;内循环的条件;内循环的操作表达式){ } }
1.内层循环可以看做外层循环的循环语句 2.内层循环执行的顺序也要遵循 for 循环的执行顺序 3.外层循环执行一次,内层循环要执行全部次数
var star ='*'; for (var j = 1; j <= 5; j++){ for(var i = 1; i <=5; i++){ document.write(star) } //每次满 5个星星 就 加一次换行 document.write('<br>') }
核心逻辑
1.内层循环负责一行打印五个星星
2.外层循环负责打印五行
for 循环小结
1.for循环可以重复执行某些相同的代码 2.for循环可以重复执行些许不同的代码,因为我们有计算器 3.for循环可以重复执行某些操作,比如算术运算符加法操作 4.随着需求增加,双重for循环可以做更多、更好看的效果 5.双重for循环,外层循环一次,内层for循环全部执行 6.for循环是循环条件和数字直接相关的循环
break
关键字for( var i = 1;i<=5;i++){ //没循环一次,吃一个包子 console.log('我吃了一个包子') //当 i 的值为3的时候,条件为true,执行{}里面的代码终止循环 //循环就不会继续向下执行了,也就没有 4 和 5 了 if(i == 3){ break } }
continue
关键字for(var i = 1; i <= 5; i++){ //当 i 的值为 3 的时候,执行 {} 里面的代码 //{} 里面有 continue,那么本次循环后面的代码就都不执行了 //自动算作 i 为 3 的这一次结束了,去继续执行 i = 4 的那次循环了 if (i == 3){ console.log('这个是第三个包子,掉地上了,我不吃了') continue } console.log('我吃了一个包子') }
//for(var i = 0;i < 10; i++){ console.log(i) } //函数,这个 {} 就是那个 “盒子” function fn() { //这个函数就是我们以前写的代码 for (var i = 0; i < 10; i++){ console.log(i) } }
function
这个关键字来声明一个函数function fn(){ //一段代码 } //function:声明函数的关键字,表示接下来就是一个函数了 //fn: 函数的名字,我们自己定义的(遵循变量名的命名规则和命名规范) //(): 必须写,是用来放参数的位置(一会我们再聊) //{}: 就是我们用来放一段代码的位置(也就是我们刚才说的 “盒子”)
var
关键字是一个道理了var
定义一个变量,把一个函数当作值直接赋值给这个变量就可以了var fn = function () { //一段代码 } //不需要在 function 后面书写函数的名字了,因为在前面已经有了
函数名()
就可以了// 声明式函数 function fn() { console.log("我是 fn 函数") } // 调用函数 fn() //赋值式函数 var fn2 = function () { console.log(" 我是 fn2 函数") } // 调用函数 fn()
//可以调用 fn() //声明式函数 function fn() { console.log('我是 fn 函数') } //可以调用 fn()
// 会报错 fn() // 赋值式函数 var fn = function () { console.log('我是 fn 函数') } // 可以调用 fn()
()
()
的作用// 声明式 function fn(行参写在这里) { // 一段代码 } fn(实参写在这里) // 赋值式函数 var fn = function (行参写在这里) { // 一段代码 } fn(实参写在这里)
1.行参
,
分隔// 书写一个参数 function fn(num) { // 在函数内部就可以使用 num 这个变量 } var fn1 = function (num) { // 在函数内部就可以使用 num 这个变量 } // 书写两个参数 function fun(num1, num2) { // 在函数内部就可以使用 num1 和 num2 这两个变量 } var fun1 = function (num1, num2) { // 在函数内部就可以使用 num1 和 num2 这两个变量 }
undefined
2.实参
function fn(num) { // 函数内部可以使用 num } // 这个函数的本次调用,书写的实参是 100 // 那么本次调用的时候函数内部的 num 就是 100 fn(100) // 这个函数的本次调用,书写的实参是 200 // 那么本次调用的时候函数内部的 num 就是 200 fn(200)
function fn(num1, num2) { // 函数内部可以使用 num1 和 num2 } // 函数本次调用的时候,书写的参数是 100 和 200 // 那么本次调用的时候,函数内部的 num1 就是 100,num2 就是 200 fn(100, 200)
1.行参比实参少
function fn(num1, num2) { // 函数内部可以使用 num1 和 num2 } // 本次调用的时候,传递了两个实参,100 200 和 300 // 100 对应了 num1,200 对应了 num2,300 没有对应的变量 // 所以在函数内部就没有办法依靠变量来使用 300 这个值 fn(100, 200, 300)
1.行参比实参多
undefined
function fn(num1, num2, num3) { // 函数内部可以使用 num1 num2 和 num3 } // 本次调用的时候,传递了两个实参,100 和 200 // 就分别对应了 num1 和 num2 // 而 num3 没有实参和其对应,那么 num3 的值就是 undefined fn(100, 200)
return
关键字就是可以在函数中间的位置停掉,让后面的代码不在继续执行function fn() { console.log(1) console.log(2) console.log(3) // 写了 return 以后,后面的 4 和 5 就不会继续执行了 return console.log(4) console.log(5) } // 函数调用 fn()
// 比如 1 + 2 是一个表达式,那么 这个表达式的结果就是 3 console.log(1 + 2) // 3 function fn() { // 执行代码 } // fn() 也是一个表达式,这个表达式就没有结果出现 console.log(fn()) // undefined
return
关键字就是可以给函数执行完毕一个结果function fn() { // 执行代码 return 100 } // 此时,fn() 这个表达式执行完毕之后就有结果出现了 console.log(fn()) // 100
函数就是对一段代码的封装,在我们想调用的时候调用
函数的几个优点
1.封装代码 ,使代码更加简洁 2.复用,在重复功能的时候直接调用就好 3.代码执行时机,随时可以在我们想要执行的时候执行
因为是在所有代码执行之前进行解释,所以叫做 预解析(预解释)
需要解释的内容有两个
声明式函数
在内存中先声明有一个变量名是函数名,并且这个名字代表的内容是一个函数
var
关键字
fn() console.log(num) function fn() { console.log('我是 fn 函数') } var num = 100
function fn() { console.log('我是 fn 函数') } var num fn() console.log(num) num = 100
var
关键字的规则进行预解析