HTML-JS 循环 函数 递归
【循环结构的执行步骤】
1、声明循环变量
2、判断循环条件
3、执行循环体操作
4、更新循环变量
然后,循环执行2-4,直到条件不成立时,跳出循环。
while循环()中的表达式,运算结果可以是各种类型,但是最终都会转化为真假
转化规则同if结构。
while循环特点:先判断,再执行。
do-while循环特点:先执行,再判断;即使初始条件不成立,do-while循环也至少执行一次。
// var num=1;//1、声明循环变量
// while (num<=10){//2、判断循环条件
// document.write(num+"<br />");//3、执行循环体操作
// num++;//4、更新循环变量
// }
【for循环】
1、for循环有三个表达式:①声明循环变量;②判断循环条件;③ 更新循环变量。
三个表达式之间用;分隔;
for循环三个表达式都可以省略,但是两个;缺一不可。
2、for循环的执行特点:先判断,再执行。与while相同。
3、for循环三个表达式,都可以有多部分组成。第二部分多个判断条件用&& || 连接,
第一三部分,用,分隔。
[循环控制语句]
1、break:跳出本层循环,继续执行循环后面的语句。
如果循环有多层嵌套,则break只能跳出一层。
2、continue:跳过本次循环剩余的代码,继续执行下一次循环。
① 对于for循环,continue之后执行的语句,是循环变量更新语句i++
② 对于while do-while循环,continue之后执行的语句,是循环条件判断。
因此,使用这两个循环时,必须将continue放到i++之后使用。否则,continue将* 跳过i++导致死循环。
例题:
输入N个数,实现从1加到N
var count = prompt("请输入整数个数:");
var i = 0;
var sum = 0;
while (i<count){
var num = parseInt(prompt("请输入第"+(i+1)+"整数:"));
if(i==count-1) document.write(num+"=");
else document.write(num+"+");
sum += num;
i++;
}
document.write(sum);
求斐波那契数列
var a=1;
var b=1;
var c=a+b;
document.write("1 "+1+" ");
for (var i=1;i<18;i++) {
a=b;
b=c;
c=a+b;
if ((i+2)%5==0&&(i+2)!=0) {
document.write(c+"<br />");
}else{
document.write(c+" ");
}
}
【函数的声明及调用】
1、函数的声明格式:
function 函数名(参数1,参数2,...){
//函数体代码
return 返回值;
}
函数的调用
① 直接调用:函数名(参数1的值,参数2的值,....);
② 事件调用方式:直接在HTML标签中,使用事件名="函数()"
<button onmouseout="SaySth('你好啊','red')">点击按钮,打印内容</button>
2、函数的注意事项
① 函数名必须要符合小驼峰法则,首字母小写之后每个单词首字母大写 ;
② 函数名后面的括号中可以有参数,也可以没有参数,分别称为有参函数和无参函数;
③ 声明函数时的参数列表称为形参列表,形式参数。(变量的名字);
function saySth(str,color){}
调用函数时的参数列表,称为实参列表,实际参数。(变量的赋值);
saySth("你好","red");
④ 函数的形参列表个数与实参列表个数没有实际关联关系。
函数参数的个数,取决于实参列表
如果实参列表的个数<形参列表,则未赋值的形参,将为Undefind。
⑤ 函数可以有返回值,使用return返回结果,调用函数时,可以使用一个变量接收函数的返回结果。
如果函数没有返回值,则接收的结果为Undefined;
function func(){
return="haha";
}
var num=func();//num="haha";
⑥ 函数中变量的作用域
在函数中,使用var 声明的变量,为局部变量。只能在函数内部访问;
不用var声明的变量,为全局变量,在函数外部也能访问;
函数的形参列表,默认为函数的局部变量,只能在函数内部使用。
⑦ 函数的声明与函数的调用没有先后之分,即可以在声明函数前调用函数
func();//声明func之前调用也是可以的
function func(){}
[匿名函数的使用]
1、声明一个匿名函数,直接赋值给某一个事件。
window.onload=function(){} 文档就绪函数
2、匿名函数表达式。将匿名函数,赋值给一个变量。
声明:var func=function(){}
调用:func();
注意:使用匿名函数表达式时,函数的调用语句,必须放在函数声明语句之后(与普通函数的区别)。
3、自执行函数:
① !function(){}();//可以使用多种运算符开头但一般用感叹号。
!function(形参列表){}(实参列表);
② (function(){}());//使用()将函数及函数后的括号包裹
③ (function(){})();使用()只包裹函数部分;
三种写法的特点:
① 使用!开头,结构清晰,不容易混乱,推荐使用。
② 能够表明匿名函数与调用的()为一个整体,官方推荐使用。
③ 无法表明括号与之后的()的整体性,不推荐使用;
//单行注释
/*多行注释,开头一个* */
/**
[JS代码的执行顺序问题]
JS代码在运行时,会分为两大部分。检查装载和执行阶段
检查装载阶段:会先检测代码的语法错误,进行变量、函数的声明
执行阶段:变量的赋值、函数的调用等,都属于执行阶段
以下面代码为例:
console.log(num);//undefined
var num=10;
func1();//函数可以正常执行
function func1(){}
func2();//函数不能执行,打印func2时,显示undefined
var func2=function(){}
上述代码的执行顺序为
------检查装载阶段-------
var num;
function func1(){}
var func2;
------代码执行阶段-------
console.log(num); num=10;
func1();
func2(); func2=function(){}
[函数的内部属性]
1、arguments对象
① 作用:用于储存调用函数时的所有实参。当我们调用函数,并用实参赋值时,实际上参数列表已经
保存到arguments数组中,可以在函数中,使用arguments[n]的形式调用。n从0开始。
② arguments数组的个数,取决于实参列表,与形参无关。
但是,一旦第N个位置的形参、实参、arguments都存在时,形参将与arguments绑定,同步变化。(即在
函数中修改形参的值,arguments也会改变,反之,亦成立)
③ arguments.callee 是arguents的重要属性,表示arguments所在函数的引用地址,在函数里面可以
使用arguments.callee调用函数本身
在函数内部,调用函数自身的写法,叫做递归。
递归分为两部分:递和归。以递归调用语句为界限,可以将函数分为上下两部分。
递:是当函数执行上半部分,遇到自身的调用语句时,继续进入内层函数,再执行上半部分。
直到执行完最内层函数。
归:当最内层函数执行完以后,再从最内层函数开始,逐渐执行函数的下半部分。
当最外层函数执行时,遇到自身的调用语句,会进入内层函数执行,而外层函数的后半部分暂不执行。直到
最内层函数执行完以后,再逐步向外执行。
使用递归计算1-10的和
var sum=0;
var i=1;
function sum1() {
sum += i;
i++;
if (i<=10) {
sum1();
}
return sum;
}
sum1();
alert(sum);
HTML-JS 循环 函数 递归的更多相关文章
- js循环函数中的匿名函数和闭包问题(匿名函数要用循环中变量的问题)
js循环函数中的匿名函数和闭包问题(匿名函数要用循环中变量的问题) 一.总结 需要好好看下面代码 本质是因为匿名函数用到了循环中的变量,而普通方式访问的话,匿名函数的访问在循环之后,所以得到的i是循环 ...
- JS匿名函数递归实现阶乘
var rs = (function (value) { if (value > 1) return value * arguments.callee(value - 1); return va ...
- <经验杂谈>介绍Js简单的递归排列组合
最近在开发SKU模块的时候,遇到这样一个需求,某种商品有N(用未知数N来表示是因为规格的数组由用户制定且随时可以编辑的,所以对程序来说,它是一个未知数)类规格,每一类规格又有M个规格值,各种规格值的组 ...
- js部分---函数与递归;
function (){}//匿名函数 1.function hanshu () { alert("这是我第一个函数"); } hanshu();//调用函数 2.//有参数的函数 ...
- ----关于统计字符出现次数的JS循环以及indesxOf函数----
以下将会通过JS循环判断字符“banana”出现次数 以及调用indexOf中的函数来实现统计 <!DOCTYPE html> <html> <body> &l ...
- JS循环中使用bind函数的参数传递问题
JS循环中使用bind函数的参数传递问题,问题代码如下: for (var sc in result) { var tempp = '<div class="sidebar_todo_ ...
- JS: 数组的循环函数
JS 数组相关的循环函数,用得挺多,所以有些坑还是要去踩一下,先来看一道面试题. 注意:下面提到的不改变原数组仅针对基本数据类型. 面试题 模拟实现数组的 map 函数. 心中有答案了吗?我的答案放在 ...
- js 函数递归优化,arguments.callee 优化
函数递归是个经典的问题,平常用的时候,小练习可以通过函数名来反复调用,比如: function factorial(num) { if (num <= 1) { return 1; } else ...
- Atitit 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate).
Atitit 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate). 1.1. 循环算是最基础的概念, 凡是重复执行一段代码, 都可以称之为循环. ...
随机推荐
- MySQL MTS复制: hitting slave_pending_jobs_size_max
测试步骤: 从库停止复制:stop slave; 主库创建大表400万条记录. 开启从库复制:start slave; 监测从库error log持续输出: 2018-12-06T10:40:52.6 ...
- Can't locate Data/Dumper.pm in perl5的处理
Can't locate Data/Dumper.pm in perl5的处理 wget http://www.cpan.org/modules/by-module/Data/Data-Dumper- ...
- 批处理之windows更改网卡IP地址
新建文本文档,更改后缀为“.bat”,写入以下代码: netsh interface ip set address name="本地连接" source=static 192.16 ...
- T4学习- 4、Kalman Studio-T4代码生成器
开源代码生成器-Kalman Studio https://github.com/loamen/Kalman.Studio 软件主要功能如下: 1.基于T4的代码生成工具,根据数据库元数据信息生成代码 ...
- 第二次项目冲刺(Beta版本)2017/12/8
一.任务分布 二.燃尽图 三.站立式会议 1.照片(就要传了) 2.任务安排 四.总结 这次吸收了上次的教训,将任务进行更加详细的分布,分工更加明确,果然效率就高多了,哈哈哈.
- 【PyCharm疑问】在pycharm中带有中文时,有时会导致程序判断错误,是何原因?
1.会导致程序打印false错误的代码如下: # -*- coding:utf-8 -*- import os import sys from uiautomator import device as ...
- Flex 布局知识点梳理
传统的布局方案,在针对特殊布局时会很不方便,比如垂直居中,把一个容器等分为N列等等.自从 Flex 出现以后,这些都迎刃而解了,本文对Flex相关内容做一个简单梳理. 什么是 Flex Flex 是 ...
- 金三银四求职季,前端面试题小梳理(HTML、CSS、JS)
好久没写学习记录,最近太多事,又到一年求职季,都说金三银四求职季,自己也做一下最近学习的一些前端面试题梳理,还是个小白,写的不对请指正,不胜感激. HTML篇 html语义化 用语义化的代码标签书写, ...
- 【Java集合源代码剖析】ArrayList源代码剖析
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mmc_maodun/article/details/35568011 转载请注明出处:http:// ...
- 修改Centos7的网卡ens32 改为eth0
1. 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-eno16777984 修改下面两个配置项 NAME=ens32 DEVICE=ens32 改 ...