4、JS之双重循环跳转及数组
1、什么是双重循环
双重循环就是⼀个循环体⾥⾯包含另外⼀个完整的循环,⼀个循环⾥⾯套着另外⼀个循环,即双重循环
2、双重循环语法结构
1、for的双重循环
语法:
for(循环条件1){
循环操作1;
for(循环条件2){
循环操作2
}
}
循环条件1的for循环我们称之为外层循环,循环条件2的循环我们称为内层循环。
特点:
外层循环运⾏⼀次,内层循环循环⼀轮。
2、注意:
多重循环在使⽤的过程中,不要超过三层,⼀旦超过,逻辑太复杂了,正常双重for就能满⾜需求
3、⽤for循环写九九乘法表
我们学习过,doucument.write(‘值’),页⾯就会显⽰这些内容,写到页⾯上。此处,我的九九乘法表就可以⽤这样的⽅式写到页⾯上去。
观察规律:
第⼀个数每⾏都是⾃增1。
我们发下第⼆个数都是从1开始,依次递增1,永远不⼤于前⾯的数。
前⾯数字每⾃增⼀次,后⾯数字⾃增⼀轮。
我们可以⽤双重for循环,外层初始值设为i,i从1开始,到9结束,⾃增1
内层从初始值设为j,j从1开始,⼩于等于外层的i,⾃增1
代码:
for (var i = 1;i<=9;i++){
for (var j = 1;j<=i;j++){
document.write(i+'*'+j+'='+(i*j)+'   ');
}
document.write('<br>');//换⾏
}
3、作⽤域
1、作⽤域就是可访问变量的范围,变声作⽤的区域。
2、作⽤域分为全局作⽤域和局部(函数)作⽤域
1. 全局作⽤域
函数以外声明的作⽤域叫全局作⽤域,整个⽂件都可以进⾏调⽤
代码⽰例:
//全局作⽤域
此时可以调⽤,因为变量是在函数外声明的,全局整个⽂件都可以调⽤。
2. 函数作⽤域
在函数内声明的变量,只能在函数内调⽤。
代码⽰例:
function fn() {
var num = 9;
}
alert(num);
此时,alert不出来东西,我们看控制台的console,可以看到:‘num is not defined’,告诉我们num未被定义,这是因为,num是在函数内声明的,它的作⽤域只在该函数内,外边调⽤不了这个函数,这就是局部作⽤域。
1、 如果我们在函数内调⽤该num,然后调⽤该函数,是可以的。
代码⽰例:
function fn() {
var num = 9;
alert(num);
}
fn();
因为是在函数内调⽤的
2、 如果我们在函数外声明⼀个全局函数,然后在函数内进⾏调⽤:
var num = 9;
function fn() {
alert(num);
}
fn();
因为,此时调⽤的num是全局变量,全局都可以使⽤,不论函数内还是函数外。
3、如果全局声明⼀个变量,函数内声明⼀个变量,变量名同名
代码⽰例:
var num = 9;
function fn() {
var num = 10;
alert(num);
}
fn()
alert(num);
此时的fn 弹出的是10,alert(num)弹出的9,因为fn调⽤的是函数内的变量,alert访问不了函数内,还是获取的全局变量,函数外的那个,所以弹出10,9.
4、 如果全局声明⼀个变量,函数内声明⼀个变量不加var,变量名同名
代码⽰例:
num = 10;
alert(num);
}
fn()
alert(num);
此时,弹出的是10,10,因为函数内num没有声明var变量,访问的是全局的变量var num,函数从上往下执⾏,被函数内的num赋值了10,覆盖了上⾯的var num9.
如果上述的代码fn和alert(num)交换位置,那么弹出的是9,10.因为第⼀访问的全局变量还没有被覆盖。
总结:
1、不加var 当变量名重名的时候,很容易把上⾯同名的变量名的值给覆盖掉进⾏修改。
2、函数内的变量不加var的时候,执⾏完该函数后,会⾃动提升作⽤域,提升为全局作⽤域。
function fn() {
num = 10;
}
javascript全局数组fn();
alert(num);
5、js执⾏流程及⽰例
js执⾏流程:
1、代码的检查装载阶段(预编译阶段),此阶段进⾏变量和函数的声明,但是不对变量进⾏赋值,变量的默认值为undefined。
⼤⽩话,就是将所有的声明(此时可理解为变量声明),都提升到最上⾯的位置,有变量名,但是没有值,就叫只声明不赋值,所以默认值是undefined。
2、代码的执⾏阶段,此阶段对变量进⾏赋值和函数的声明。
⼤⽩话:搞完步骤1以后,会对变量进⾏赋值。并从上向下执⾏。
var a=1; //声明了⼀个全局变量
function func(){
console.log(a); //输出:undefined。打印a,⽽在func这个作⽤域中已经声明了a变量,按照js的执⾏顺序,此时的a并未被赋值。
var a=1;
console.log(a); //输出:1。
}
上⾯代码第⼀个a输出undefined。
原因:js作⽤域链的访问规则,当前作⽤域内存在要访问的变量a,所以使⽤当前作⽤域中的变量(就近原则)。再根据js代码的执⾏顺序,此时的a只是声明了⽽并未被赋值,默认为undefined,所以输出undefined。
3、举例看各种效果:
var a =100;
function fn() {
var b = 2 * a;
var a = 200;
var c = a/2;
alert(b);
alert(c);
}
fn();
此时alert(b)显⽰NaN,因为根绝作⽤域访问规则,会先从当前作⽤域内要访问的变量,就近原则,发现有变量a,再根据执⾏流程第⼀步,此时的a并未被赋值,所以是undefined,所以*2的时候显⽰NaN。
⽽能弹出c的100,因为从上向下执⾏的时候,a已经被赋值了200,所以结果为100.
6、字符串拼接
var a =1;
alert(‘a’)和alert(a);
上⾯显⽰的结果是不同的,第⼀个弹出a,第⼆个弹出1.
因为引号内的内容是原样输出的,写什么输出什么。直接写变量名,接收的是变量值,内容和内容之间的拼接⽤+号连接 如:alert(‘a的值是’+a);
7、break 和continue
1、break 特点
1.break语句⽤于终⽌某个循环,使程序跳到循环块外的下⼀条语句
2.在循环中位于break后的语句将不再执⾏
3.不仅可以⽤在循环中,也可以⽤在其他语句中
2、 练习break语句:
依次输⼊5名学员成绩,如果成绩输⼊为负数,则强制停⽌输⼊,并给予提⽰;
否则,在页⾯中输出学员成绩
代码⽰例:
for (i=0;i<5;i++){
var score = prompt('请输⼊第'+(i+1)+'名同学的成绩')-0;
if (score<0||isNaN(score)){
document.write('第'+(i+1)+'名同学成绩输⼊有误,强制退出');
break;
}
document.write('第'+(i+1)+'名同学的成绩为:'+score+'<br>');
}
8、⼩练习⼤练兵
1、让⽤户输⼊⼀组数字,判断是⼏位数,
⽐如说,223,-----3位
⽐如说,1000,-----4位
代码:
var num = prompt('请输⼊⼀个数字')-0;
for (var i = 1;i > 0;i++){
num = parseInt(num / 10);
console.log(num);
if (num <= 0){
break;
}
}
alert('这是个'+i+'位数');
2、判断1000以内的质数
分析:
什么是质数,指在⼤于1的⾃然数中,除了1和它本⾝以外不再被其他数整除。
所以我们可以判断,数字是从2-1000以内的数字,除数就是从1-⾃⼰本⾝内的数字,然后判断除了1和⾃⾝,能不能被其他数字整除,如果还有其他,肯定就是不是的
代码:
for (var i =2;i<=1000;i++){
for (var j =2;j<=i;j++){
if (i%j===0){
break;
}
}
if (i===j){
document.write(i+'是质数<br>');
}
}
9、数组
1、什么是数组:
保存⼀组数据的集合,就称为数组
2、数组的作⽤
对象的作⽤是:使⽤单独的变量名来存储⼀系列的值,⽤⼀个变量名来存储多个数据,就不⽤⼀个⼀个起变量名了
3、声明数组
var 数组名 = [];
[]就代表数组。
第⼆种写法:
var 数组名 =new Array();  了解即可不需要记
** 4、给数组赋值:**
var nums = [1,2,3,4,5,6,];
数组赋值直接在中括号⾥⾯写。
⼀个数组内可以写⽆数个值,每个值⽤逗号隔开。
5、如何访问数组:
数组名[下标]
下标就是数组内每个值的顺序的编号,编号从0开始,0,1,2,3…
例⼦:
nums[2];指的就是3,因为下标是从0开始的,所以下标2就是数组内的第三个数3
6、如何查看数组的长度
数组名.length; 显⽰的就是数组内有⼏个数组项,⽐如数组⾥⾯装了5个数据,那么 数组名.length输出的结果就是5。
7、如何⼀次把数组内的元素全部都展现出来。(此处以数组nums⽰例)
我们直到查看数组内元素的⽅法是 nums[下标],如果想全部查看:
nunms[0];
nunms[1];
nunms[2];
nunms[3];
nunms[....];
我们发现这样⾮常的⿇烦,同时间发现了⼀个规律,数组的下标是从0开始,每次⾃增1,所以,我们可以⽤for循环,初始值就是0,条件就是⼩于数组的长度,每次⾃增1,执⾏的操作就是弹出nums[i];

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。