判断客户端的输入(之前的网速慢)javascript
页面特效(PC端的网页效果)
移动端(移动web和app)
异步和服务器交互
服务端开发(nodejs)java
http://www.codecombat.cn/(游戏)
http://www.webhek.com/node
JavaScript是世界上用的最多的脚本语言
脚本语言:不须要编译,直接运行时边解析边执行的语言
JavaScript是一种客户端的脚本语言c++
当时工做于 Netscape 的 Brendan Eich,开始着手为即将在 1995 年发行的 Netscape Navigator 2.0 开发一个称之为 LiveScript 的脚本语言,当时的目的是在浏览器和服务器(原本要叫它 LiveWire)端使用它。Netscape 与 Sun 及时完成 LiveScript 实现。就在 Netscape Navigator 2.0 即将正式发布前,Netscape 将其改名为 JavaScript,目的是为了利用 Java 这个因特网时髦词汇。Netscape 的赌注最终获得回报,JavaScript 今后变成了因特网的必备组件。程序员
三足鼎立
由于 JavaScript 1.0 如此成功,Netscape 在 Netscape Navigator 3.0 中发布了 1.1 版。恰巧那个时候,微软决定进军浏览器,发布了 IE 3.0 并搭载了一个 JavaScript 的克隆版,叫作 JScript(这样命名是为了不与 Netscape 潜在的许可纠纷)。微软步入 Web 浏览器领域的这重要一步虽然令其声名狼藉,但也成为 JavaScript 语言发展过程当中的重要一步。
在微软进入后,有 3 种不一样的 JavaScript 版本同时存在:Netscape Navigator 3.0 中的 JavaScript、IE 中的 JScript 以及 CEnvi 中的 ScriptEase。与 C 和其余编程语言不一样的是,JavaScript 并无一个标准来统一其语法或特性,而这 3 中不一样的版本偏偏突出了这个问题。随着业界担忧的增长,这个语言的标准化显然已经势在必行。web
JavaScript、HTML、CSS各自的做用
HTML 提供网页上显示的内容(结构)
CSS 美化网页(样式)
JavaScript 控制网页行为(行为)
设计原则:
结构、样式、行为---分离!数据库
ECMAScript
JavaScript的语法规范
DOM
JavaScript操做网页上元素的API
BOM
JavaScript操做浏览器部分功能的APIexpress
HTML页面书写JavaScript编程
引入外部JavaScript文件c#
type
type="text/javascript"
能够省略
async
async="async"
值能够省略,当即异步下载外部js,不影响页面其它的操做,全部js完毕执行
defer
defer="defer”
值能够省略,脚本延迟到文档彻底被解析和显示后再执行,只有外部脚本可使用
变量是在计算机中存储数据的一个标识符。
变量能够在声明的时候赋值,也能够稍后赋值。
例如:
var number = 50;
var name = "马户";
或者
var name;
name = “张三”;
能够在一行上定义多个变量
var name,age,sex;
JavaScript是弱类型的脚本语言
下面这两行代码在JavaScript中是合法的,缘由是JavaScript是弱类型的语言。不推荐使用。
var age = 90;
age = “马户”;
规则(必须遵照)
由字母、数字、下划线、$组成
不能是关键字和保留字
区分大小写
规范(建议遵照)
变量的名称要有意义
变量的命名遵照驼峰命名法,首字母小写,第二个单词的首字母大写
例如:userName
单行注释
//单行注释
多行注释
/* 多行注释 */
注释的应用
注释通常用于解释某些复杂代码的逻辑,方便与后期的维护和开发
注释通常用于对整个模块进行分割划分,方便于代码查找代码和维护
注释通常用于:模块、函数、复杂逻辑注解、文件注解、维护记录等
掌握四种经常使用的数据类型
Number
String
Boolean
Undefined //变量声明,但未赋值
null
计算机在存储数据的时候是有类型的
JavaScript中的数据类型
简单(基本、值)数据类型
Number、String、Boolean
Undefined、Null
复杂(引用)数据类型(暂时了解)
Object、Array、Date等
查看当前变量的数据类型
typeof name
typeof(name)
◆number 数字类型
◆string 字符串类型
var s1=”123”; s1的数据类型字符串
◆Boolean 布尔类型
◆true 真 (正确的)
◆false 假(错误的)
◆undefined 变量未初始化
var s1; 定义了变量,可是没有给变量赋值,那么该值的数据类型就是 undefined 类型
◆变量取值为null的时候
var s1=null; 表示变量值为空,该变量在内存中是不存在的。真正的空。 s1的数据类型为 object
◆object 对象
◆Array 数组
字面量
固定的值,让你从“字面上”理解其含义。
数值字面量
var age = 18; // 数值字面量,18为字面值
Number类型
十进制
var num = 9;
进行算数计算时,八进制和十六进制表示的数值最终都将被转换成十进制数值。
十六进制
var num = 0xA;
数字序列范围:0~9以及A~F
八进制
var num1 = 07; //对应十进制的7
var num2 = 019; //对应十进制的19
var num3 = 08; //对应十进制的8
数字序列范围:0~7
若是字面值中的数值超出了范围,那么前导零将被忽略,后面的数值将被看成十进制数值解析
浮点数
var n = 5e-324;
浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数
var result = 0.1 + 0.2; // 结果不是 0.3,而是:0.30000000000000004
console.log(0.07 * 100);
永远不要测试某个特定的浮点数值(不要判断两个浮点数是否相等)
因为内存的限制,ECMAScript 并不能保存世界上全部的数值
最小值:Number.MIN_VALUE,这个值为: 5e-324
最大值:Number.MAX_VALUE,这个值为: 1.7976931348623157e+308
无穷大:Infinity
无穷小:-Infinity
NaN 非数值(Not a Number)
console.log(“abc”/18); //结果是NaN
NaN 与任何值都不相等,包括 NaN 自己
isNaN() :任何不能被转换为数值的值都会致使这个函数返回 true
isNaN(NaN);// true
isNaN(“blue”); // true
isNaN(123); // false
字符串字面量
var name = "zhangsan"; //"zhangsan"字面量
字符串要用引号引发,单引号和双引号的做用是等效的
例如:
var name = "zhangsan";
var name = 'zhangsan';
var name = 'zhangsan"; //错误,单引号和双引号要成对出现
字符串是由一个一个字符组成的,获取一个字符串中字符的个数可使用length
例如:var name="zs"; alert(name.length);//2
要想打印"或者'怎么办?
var str = "hello \"itcast\""; //打印输出hello "itcast"
转义符
ECMAScript 中的字符串是不可变的,也就是说,字符串一旦建立,它们的值就不能改变。
要改变某个变量保存的字符串,首先要销毁原来的字符串,而后再用另外一个包含新值的字符串填充该变量
例如:
var str = "123"; str = str + "abc";
若是有两个字符串变量a,b,如何把这两个变量的值链接起来?
例如:
var a = "hello";
var b = " itcast";
var c = a + b;
-思考:
var a = “100";
var b = 100;
var c = a - b; //结果是什么?
Boolean类型有两个字面量:true和false,而且区分大小写!
虽然Boolean 类型的字面值只有两个,但 ECMAScript 中全部类型的值都有与这两个 Boolean 值等价的值
例如:
var result = Boolean("a");
console.log(result); //结果是true
var result = Boolean(100);
console.log(result); //结果是true
任何类型能够转换成Boolean类型,通常使用在流程控制语句后面
例如:
var message = "hello";
if(message) { alert(message + " world") };
Undefined这是一种比较特殊的类型,表示变量未赋值,这种类型只有一种值就是undefined
例如:
var message;
console.log(message); //结果是undefined
undefined是Undefined类型的字面量。
例如:
var message = undefined;
console.log(message);
typeof message; 获取到的是"undefined"
思考
下面代码输出的结果?
var message;
if (message) {
alert("有值");
}else{
alert("无值");
}
目标
掌握三种类型的转换
转换成字符串类型
转换成数值类型
转换成布尔类型
三种转换成字符的方法
一、几乎每个值都有toString()方法
例如:
var age = 18;
var ageString = age.toString();
console.log(ageString); // 结果 "18"
var result = true;
var resultString = result.toString();
console.log(resultString);// 结果 "true"
数值类型的toString(),能够携带一个参数,输出对应进制的值
var num = 10;
console.log(num.toString()); //"10" 默认是10进制
console.log(num.toString(10));//"10"
console.log(num.toString(8)); //"12"
console.log(num.toString(16));//"a"
console.log(num.toString(2)); //"1010"
三个把值转换成数值类型的函数:Number()、 parseInt()、 parseFloat()
parseFloat()把字符串转换成浮点数
parseFloat()和parseInt很是类似,不一样之处在与
parseFloat会解析第一个. 遇到第二个.或者非数字结束
parseFloat不支持第二个参数,只能解析10进制数
若是解析的内容里只有整数,解析成整数
两种转换布尔类型的方式
Boolean()函数
例如:
var b = Boolean("123"); //返回yes
流程控制语句会把后面的值隐式转换成布尔类型
例如:
var message;
if (message) { //会自动把message转换成false
//todo...
}
转换为false的值:false、""、0和NaN、null、undefined
猜猜看,下面的语句的结果
var b = !!"123";
第一个逻辑非操做会基于不管什么操做数返回一个布尔值
第二个逻辑非操做则对该布尔值求反
因而就获得了这个值真正对应的布尔值(结合性从右向左)
目标
算数运算符
一元运算符
逻辑运算符 (&& || !)
比较运算符
赋值运算符
运算符的优先级
+ 加法运算符
若是运算符,有一个操做数为字符串则将另外一个操做数转换成字符串而后再将两个字符串拼接
例如:
var str = "abc" + 123; //返回"abc123"
- 减法运算符
* 乘法运算符
/ 除法运算符
% 求模(取余)运算符
/ 除0,返回Infinity
% 取余,返回NaN
运算符 |
结果 |
+ |
若是是数字类型的变量相加,那么结果为数字类型 若是是非数字类型的变量相加,结果为字符串类型 |
- |
若是是非数字类型的变量相减结果为 NaN |
* |
同上 |
/ |
同上 ,若是0做为除数,结果为infinity(无穷大) |
% |
获取余数 |
() |
优先级 有括号先计算括号里面的值 |
只能操做一个值的操做符叫作一元操做符,分为:前置型和后置型
顾名思义,前置型应该位于要操做的变量以前,然后置型则应该位于要操做的变量以后
执行前置递增和递减操做时,变量的值都是在语句被求值之前改变的。
++
前置++
var age = 18;
++age; //结果 19
执行过程
var age = 1;
age = age + 1;
后置++
var age = 18;
age++; //结果 19
和前置++的不一样点在于,递增操做是在整个语句求值以后执行的,此处和上面的结果没有任何区别。
练习:
var a = 1; var b = ++a + ++a; console.log(b);
var a = 1; var b = a++ + ++a; console.log(b);
var a = 1; var b = a++ + a++; console.log(b);
var a = 1; var b = ++a + a++; console.log(b);
--和++相同
&& 与
属于*短路操做*,即若是第一个操做数可以决定结果,那么就不会再对第二个操做数求值
只有两个操做数都为true,结果为true
只要有一个操做数为false,结果为false
|| 或
属于*短路操做*,若是第一个操做数的求值结果为true ,就不会对第二个操做数求值了
有一个操做数为true,结果为true
有一个操做数false,结果为false
! 非
逻辑非操做符首先会将它的操做数转换为一个布尔值,而后再对其求反
只有一个操做数
短路操做:
与
若是第一个操做数是对象,返回第二个操做数
若是第二个操做数是对象,而且第一个操做数是true返回第二个操做数
若是有一个操做数是null(NaN/undefined),返回null(NaN/undefined)
或
若是第一个操做数是对象,返回第一个操做数
若是第二个操做数是对象,而且第一个操做数是false返回第二个操做数
若是两个操做数都是对象,返回第一个操做数
若是两个操做数都是是null(NaN/undefined),返回null(NaN/undefined)
非
练习:
非
若是操做数是对象,返回false
若是操做数是空字符串,返回true
若是操做数是非空字符串,返回false
若是操做数是0,返回true
若是操做数是任意非0值,返回false
若是操做数是null,undefined,NaN,返回true
上面的规则能够简化成
转换为false的值:false、""、0和NaN、null、undefined
!!"abc"结果是什么
< <= >= >
在比较字符串时,实际比较的是两个字符串中对应位置的每一个字符的字符编码值。
在比较数值和字符串时,字符串都会被转换成数值,而后再以数值方式与另外一个数值比较
若是一边是数子,另外一边是Boolean,先把Boolearn类型的值转换成数字,再比较
== != 相等和不相等
=== !== 全等和不全等
相等只比较值,全等比较的是值和类型
例如:
var result = "55" == 55; //true
var result = "55" === 55; //false 值相等,类型不相等
var result = 55 === 55; //true
= += -= *= /= %=
例如:
var num = 0;
num += 5;//至关于 num = num + 5;
优先级从高到底
() 优先级最高
一元运算符 ++ -- !
算数运算符 先* / % 后 + -
关系运算符 > >= < <=
相等运算符 == != === !==
逻辑运算符 先&& 后||
练习1
((4 >= 6) || ("人" != "狗")) && !(((12 * 2) == 144) && true)
练习2
var num = 10;
if(5 == num / 2 && (2 + 2 * num).toString() === "22") {
console.log(true);
}
Date对象用于处理日期和时间。
Math.ceil() 天花板函数 向上取整
★若是是整数,取整以后是这个数自己
★若是是小数,对数进行向上舍入。
Math.floor() 地板函数
★若是是整数,取整以后是这个数自己
★若是是小数,对数进行向下舍入。
Math.max()
Math.min()
Math.pow()
Math.round()
Math.random()
String()
变量.toString()
◆Number
★数字类型的字符串,转换以后获得的数字。
★非数字字符串,转换以后获得是NaN。
★小数类型的字符串,转换以后获得的是原数字。
◆parseInt
★整数数字类型的字符串,转换以后获得的整数数字。
★数字开头的字符串,转换以后获得的是前边的数字。
★非数字开头的字符串,转换以后获得的是NaN。
★小数类型的字符串,转换以后取整。
◆parseFloat
★整数数字类型的字符串,转换以后获得的整数数字。
★数字开头的字符串,转换以后获得的是前边的数字。
★非数字开头的字符串,转换以后获得的是NaN。
★小数类型的字符串,转换以后获得的是原数字。
Boolean()
★数字和字符串转完以后为true。
★undefined、null、0转完以后为false.
在运算过程当中,程序本身进行的数据转换(程序员没有操做)
逻辑运算只有2个结果,一个为true,一个为false.
◆且&&
★两个表达式为true的时候,结果为true.
◆或||
★只要有一个表达式为true,结果为true.
◆非!
★和表达式相反的结果。
“=”赋值运算符
“==”只判断内容是否相同,不判断数据类型。
“===”不只判断内容,还判断数据类型是否相同。
!= 只判断内容是否不相同,不判断数据类型。
!==不全等于 不只判断内容是否不相同,还判断数据类型是否不相同。
顺序结构
选择结构
循环结构
语法:
if(condition) {
statement1
}else if (aaa){
statement2
}else{
statement3
}
性别在数据库中存储的是1和0,要求输出男或女
var sex = 1;
if(sex === 1) {
console.log("男");
}else{
console.log("女");
}
简化的方式
var sex = 1;
sex = sex === 1 ? "男":"女";
表达式1 ? 表达式2 : 表达式3
语法:
switch (expression) {
case value:
statement
break; // break 关键字会致使代码执行流跳出 switch 语句
case value:
statement
break;
default:
statement
}
注意:
break能够省略,若是省略,代码会继续执行下一个case
switch 语句在比较值时使用的是全等操做符,所以不会发生类型转换(例如,字符串 "10" 不等于数值 10)。
案例:
var fruit=prompt("请输入您喜欢吃的水果"); switch(fruit){ case "苹果": alert("您喜欢吃的是苹果"); break; //阻断代码执行 case "香蕉": alert("您喜欢吃的是香蕉"); break; case "葡萄": alert("您喜欢吃的是葡萄"); break; default: alert("口味真重"); break; }
switch(fruit){ case "苹果": case "香蕉": case "葡萄":// case值的集体声明 alert("您喜欢吃水果"); break; default: alert("口味真重"); break; }
练习:
判断当天是星期几
var jj=prompt("请输入月份"); switch(jj){ case "3": case "4": case "5": alert("春季"); break; case "6": case "7": case "8": alert("夏季"); break; case "9": case "10": case "11": alert("秋季"); break; case "12": case "1": case "2": alert("冬季"); break; default: alert("您在火星"); break; }
把百分制转换成优良中可差
var score=prompt("请输入成绩"); switch(score){ case "20": alert("成绩为20"); break; case "40": alert("成绩为40"); break; case "60": alert("成绩为60"); break; default: alert("输入错误"); break; }
语法
for (initialization; expression; post-loop-expression) statement
initialization表示:初始化表达式
expression表示:控制表达式
post-loop-expression表示:循环后表达式
三者都是可选的
循环1-100
执行过程
1 首先初始化
2 循环的判断
3 函数体代码
4 post-loop-expression
5 从第2步开始向下重复进行
练习:
1 打印1到100
//将1-10的数字打印到控制台 for(var n1=1; n1<=10; n1++){ console.log(n1); }
2 打印1到100的和
// 计算1到100的和 var sum=0; for(var n1=1; n1<=100; n1++){ sum=sum+n1; } console.log(sum);
3 求1-100之间全部数的和、平均值
4 求1-100之间全部偶数的和、全部奇数的和
5 本金10000元存入银行,年利率是千分之三,每过1年,将本金和利息相加做为新的本金。计算5年后,得到的本金是多少?
6 有我的想知道,一年以内一对兔子能繁殖多少对?因而就筑了一道围墙把一对兔子关在里面。已知一对兔子每月能够生一对小兔子,而一对兔子从出生后第3个月起每个月生一对小兔子。假如一年内没有发生死亡现象,那么,一对兔子一年内(12个月)能繁殖成多少对?
兔子的规律为数列,1,1,2,3,5,8,13,21
2 打印正方形
3 打印直角三角形
// 在页面中打印一个直角三角形 for(var j=1; j<=9;j++){ for(var i=1; i<=j; i++){ document.write("*"); }document.write("<br>"); }
1 打印9*9乘法表
// 在页面中打印99乘法表 for(var j=1; j<=9; j++){ for(i=1;i<=j; i++){ document.write(i+"X"+j+"="+j*i+" "); }document.write("<br>"); }
从1乘到100;
计算出1—100之间全部不能被7整除的整数的数字之和。
计算出1—100之间全部不能被3整除的整数的和大于(或等于)2000的数字。
break语句
在循环体中,只要代码遇到break,程序立马结束当前循环。
当前循环指的是break语句全部的循环体。
当即退出循环
案例:
//输出找到1-100之间的全部质数 var flag=0; //标识符 for(var j=1; j<=100; j++){ for(var i=2; i<j; i++){ if(j%i==0){ flag=1; break; }else{ flag=0; } } if(flag==0 && j!=1){ console.log(j); } }
continue语句
continue跳出本次循环
当即退出当前循环,但退出循环后会从循环的顶部继续执行
案例
//将6之外的1-10数字打印到控制台 for(var n1=1; n1<=10; n1++){ if(n1==6){ continue; }else{ console.log(n1); } }
// 请将1到100之间全部数字输出,排除是3的倍数的数字 for(var i=1; i<=100; i++){ if(i%3==0){ continue; }else{ console.log(i); } }
break和continue的区别:
比如报数1到10,break语句报道6中止后面不报了(123456),continue跳过6继续报后面的数(12345 789)。
语法
while(expression) statement
执行顺序
1. 先执行expression
2. 再执行循环体中的代码
//将1到100之间的全部是3的倍数找出来,在控制台中输出 var n1=1; while(n1>=1 && n1<=10){ if(n1%3==0){ console.log(n1); }else{ } n1++; }
// 求1到100之间的数字和。在控制台中输出 var n1=1; var sum=0; while(n1>=1 && n1<=10){ sum=sum+n1; n1++; }
//亲,请将1到50中全部的奇数找出来,并在控制台中输出! var n1=1; while(n1>=1 && n1<=50){ if(n1%2==0){ }else{ console.log(n1); } n1++; }
练习
任意输入一个整数,求它的位数
语法
do {statement} while (expression);
循环体中的代码至少要被执行一次
执行顺序
1. 先执行statement语句
2. 再执行expression
var n1=1; var n2=5; do{ alert("n1>n2"); }while(n1>n2)
以前学习的数据类型,只能存储一个值
咱们想存储多个值的时候可使用数组
好比:存储班级中全部学生的姓名
数组:数据的有序列表,能够存听任意类型的数据,数组的大小能够动态调整。
建立数组的两种方式
方式1,数组字面量
var arr1 = []; //建立一个空数组,数组字面量
var arr2 = [1, 3, 4]; //建立一个包含3个数值的数组,多个数组项以逗号隔开
var arr3 = ["a", "c"]; // 建立一个包含2个字符串的数组
方式2,Array的构造函数
var arr4 = new Array(); // 建立一个空数组
var arr5 = new Array(10); // 建立一个长度为10的数组
var arr6 = new Array("black", "white", "red"); // 建立一个包含3个字符串的数组
获取数组中的值
var colors = ["black", "white", "red"];
console.log(colors[0]); //获取第一个元素的值
colors["1"] = "blue"; //给第2个元素从新赋值
console.log(colors);
colors["4"] = "yellow"; //设置第5个元素的值,此时数组中有5个元素
console.log(colors);
length属性,获取或设置数组中元素的个数
console.log(colors.length);//获取数组中元素的个数
colors.length = 1; //设置数组中元素的个数
console.log(colors);
数组练习
求一组数中的全部数的和 和平均值
求一组数中的最大值和最小值,以及所在位置
将字符串数组用|或其余符号分割
要求将数组中的0项去掉,将不为0的值存入一个新的数组,生成新的数组
翻转数组
冒泡排序,从小到大
过去的调试
alert
console.log
设置断点
函数能够封装一段JavaScript代码,它只定义一次,但能够被执行或调用任意屡次
编程就是把需求分解成一组函数与数据结构的能力
函数的定义
function 函数名 (var1, var2, ..., varX) {
//函数体
}
函数的调用
函数名();
函数函数的几种形式
无参数无返回值
有参数无返回值
无参数有返回值
有参数有返回值
函数返回值
若是函数体中出现return则后面的代码不执行
当不写返回值,或者return后面没有跟内容的时候返回的也有返回值undefined,这是和其它语言不一样的地方
JavaScript中的函数比较奇葩
1. 若是函数没有显示的使用 return语句 ,那么函数有默认的返回值:undefined
2. 若是函数使用 return语句,那么跟再return后面的值,就成了函数的返回值
3. 若是函数使用 return语句,可是return后面没有任何值,那么函数的返回值也是:undefined
4. 函数使用return语句后,这个函数会在执行完 return 语句以后中止并当即退出,也就是说return后面的全部其余代码都不会再执行。
5. 推荐的作法是要么让函数始终都返回一个值,要么永远都不要返回值。
函数的参数
形参
function f(a,b){} //a,b是形参,占位用,函数定义时形参无值
实参
var x= 5,y=6;
f(x,y); //x,y实参,有具体的值,会把x,y复制一份给函数内部的a和b,函数内部的值是复制的新值,没法修改外部的x,y
JavaScript中的函数相对于其它语言的函数比较灵(特)活(殊)
在其它语言中实参个数必须和形参个数一致,可是JavaScript中没有函数签名的概念,实参个数和形参个数能够不相等
没有重载(了解)
什么是重载:方法的签名相同(函数返回值、函数名称、函数参数),其它语言(c++、Java、c#)中有方法的重载。
JavaScript中没有方法的重载
function f1(a,b) {
return a + b;
}
function f1(a,b,c) {
return a + b + c;
}
var result = f1(5,6); //NaN
三个参数的f1把两个参数的f1覆盖,调用的是三个参数的f1
证实JavaScript中没有重载
一、函数声明
function f(a,b) {
return a + b;
}
console.log(f(5,6));
二、函数表达式
//myFun和f等价
var myFun = function (a,b){
return a + b;
}
console.log(myFun(6,7));
块级做用域
在其它语言中,任何一对花括号中的语句都属于一个块,在这之中定义的全部变量在代码块外都是不可见的
JavaScript中没有块级做用域
全局变量
定义在script或者不属于某个函数的变量
局部变量
定义在函数内部的变量
其它
函数内部能够访问到该函数所属的外部做用域的变量(做用域链)
不使用var声明的变量是全局变量,不推荐使用。
变量退出做用域以后会销毁,全局变量关闭网页或浏览器才会销毁
变量提高
定义变量的时候,变量的声明会被提高到做用域的最上面,变量的赋值不会提高。
函数提高
JavaScript解析器首先会把当前做用域的函数声明提早到整个做用域的最前面
函数声明和函数表达式的区别
函数声明
//此处的代码执行没有问题,JavaScript解析器首先会把当前做用域的函数声明提早到整个做用域的最前面。
console.log(f(5,6));
function f(a,b) {
return a + b;
}
函数表达式
//报错:myFun is not a function
//这是为何呢
myFun(6,7);
var myFun = function (a,b){
return a + b;
}
匿名函数:没有命名的函数
做用:通常用在绑定事件的时候
语法
function () {}
自调用函数
(function(){alert("hello")})();
函数练习
求圆的面积
求2个数中的最大值,求3个数中的最大值
判断一个数是不是素数
求阶乘
求1!+2!+3!+....+n!
求一组数中的最大值和最小值
求斐波那契数列Fibonacci中的第n个数是多少? 1 1 2 3 5 8 13 21...
翻转数组,返回一个新数组
对数组排序,从小到大
输入某年某月某日,判断这一天是这一年的第几天?
什么是递归?
方法自身调用,通常还要有结束的提交
案例:
从前有座庙,庙里有个老和尚
求n个数的累加
输入一个数,求这个数的各位数字之和。
求Fibonacci的第n个数
1 1 2 3 5 8 13 21...
函数是一种数据类型
typeof f1
函数做为方法的参数
函数做为方法的返回值