变量
- 变量指的是在程序中保存数据类型的一个容器
- 是计算机内存中存储数据的标识符,根据变量名称可以获取到内存中的存储数据
- 语法:
var 变量名=值;
定义变量及赋值
//定义一个变量
var num;
//给变量赋值
num= 100;
//定义一个变量的同时给其赋值
var num2=190;
- 注意:
- 一个变量名只能存储一个值
- 当再次给一个变量赋值的时候,前面的值就被覆盖了
- 变量名区分大小写(js严格区分大小写)
变量名的命名规则和命名规范
- 规则:必须遵守,不遵守就是错
- 一个变量名可以由数字,下划线,字母,$,组成
- 严格区分大小写
- 不能由数字开头
- 不能是保留字或者关键字
- 不要出现空格
- 规范:建议遵守,不遵守会报错
- 变量名尽量有意义(语义化)
- 遵循驼峰命名规则,由多个单词组成的时候,从第二个首字母开始大写
- 不要使用中文
数据类型
数据类型分为基本数据类型和复杂数据类型
基本数据类型
-
数值类型
/* 100 100.3 科学计数 100e5 进制(二进制0b,八进制0o,十六进制0x) 补充知识点:十进制:0~9 二进制:0~1 0b101 八进制:0~7 0o 0o77 十六进制 0~9 a~f a11 b12 c13 d14 f15 正无穷 infinite 负无穷 NaN */
- 字符串型
- 被引号包裹的所有内容(可以是单引号也可以是双引号)
console.log("hell'o' word"); console.log(`haha hehe`) // 最终会输出两个 这里的回车键原样显示 var age = 18 console.log(`我今年 ${age} 岁`) // 反单引号中 原样显示 换行会原样显示, 可以解析变量 如果想解析变量 就要 在变量外边加上 ${}
-
布尔类型(boolean)
- 只有两个(
true
或者false
)
//布尔值一定全是小写,必须是小写 var yes=true; console.log(yes);
- 只有两个(
-
null类型(null)
- 只有一个,就是
null
,表示空的意思,先预留位置
- 只有一个,就是
//null 表示空,什么都没有 先预留着位置 var test=null;//null 是个关键字 console.log(test);
- undefined类型(undefined)
仅仅声明,但是没有赋值
//underfined 仅仅声明,但是没有赋值 var test; console.log(test);
判断数据类型
- 用typeof 关键字来进行判断
有两种方法
// 第一种使用方式 var n1 = 100; console.log(typeof n1); // 第二种使用方式 var s1 = 'abcdefg'; console.log(typeof(s1));
练习
var test = 0xabc;//数值型 console.log(typeof test); var test = 'hahahah ';//字符串型 console.log(typeof test); var test = true;//布尔型 console.log(typeof test); var test2; console.log(typeof test2); var test1 = null;//null 是object 的一个特殊类型 console.log(test1); //typeof 是系统提供的一个工具 //只有数据类型,没有变量类型 //返回的两个number是什么类型 再加一个typeof 返回的结果一定是string类型 console.log (typeof 10 + 100)// 只要加号两边有字符型 他们就会拼接在一起, 就会连在一起(结果:number100)
判断一个变量是不是数字
- 可以使用
isNaN
这个方法来判断一个变量是不是数字 isNaN
:is not a number
// 如果变量是一个数字 var n1 = 100; console.log(isNaN(n1)); //=> false // 如果变量不是一个数字 var s1 = 'Jack' console.log(isNaN(s1)); //=> true
数据类型的转换
- 数据类型之间的转换,数值转成字符串,字符串转成布尔,布尔转成数字型
其他数据类型转成数值
number(变量)
可以把一个变量强制转换成数值类型
可以转换小数,会保留小数
可以转换布尔值
遇到不可转换的都会返回
NaN
//number
//转换的内容看成一个整体处理
//如果可以转成一个合法的数值, 则转成数字
//如果不能转成一个合法的数字,则转成NaN
//true->1 false->0
var num1 = 'abc123';
console.log(num1);
var num2 = Number(num1)
console.log(typeof (num2))
console.log(num2);//无法装成合法数值,就出现nan
console.log(Number(true));
var test;
console.log(Number(test));//nan
console.log(Number(null));//0
parseInt
(整型)
从第一位开始检查,是数字就转换,知道一个不是数字的内容
开头就不是数字,那么直接返回
NaN
不认识小数点,只能保留整数
//整形parseInt()
//不管转成什么,都是一位一位对待
//如果第一位不能转成合法数值,那么立马输出nan 然后停止转换
//如果第一位能转成合法数字 那么保留第一位 然后继续看第二位
//以此类推直到结束
//true->NaN flase->NaN
//不认小数点
var num3 = '123abc';
console.log(parseInt(num3));
console.log(parseInt(num3,16));//告诉转换器是一个16进制的数字,所以最总结果是转成10进制
console.log(parseInt('1010101'));//1010101
console.log(parseInt('1010101',2));//2转10进制 85
console.log(parseInt('123.45'));//小数点识别不了,不知道转成那个数字,所以停止 ,输出123
console.log(parseInt(true));//nan
console.log(parseInt(NULL));//NAN
var test;
console.log(parseInt(test));//nan
parseFloat(浮点型)
从第一位开始检查,是数字就转换,知道一个不是数字的内容
开头就不是数字,那么直接返回
NaN
认识一次小数点
//parseFloat()浮点型
// 也是以为一位的对待 同parseInt
// 如果第一位不能转成合法的值 那么就立马输出 NaN 然后停止转换
// 如果第一位可以转换 那么保留第一位 继续下一位
// 识别小数点
var test = '123.45';
console.log(parseFloat(test));// 123.45
console.log(parseFloat('123.45abc'));// 123.45
console.log(parseFloat('abc123.45'));// 123.45
var test;
console.log(parseFloat(test));// NaN
console.log(parseFloat(null));
-
+
运算符两边都是可运算数字才
如果运算符任何一边不是一个可运算数字,那么就会返回
NaN
(字符串)加法不可以用
//+ 除了相加 还有拼接的作用 console.log(typeof (1 + 1 + 'abc')); //只要两边有以一个字符串,那麽就是拼接 //从左往右运算2+'abc' 2abc console.log(typeof ('abc' + 1 + 1));//abc11 开始就见到字符串 后边全是拼接
其他数据转成字符串
-
变量.toString()
有一些数据类型不能使用
toString()
方法,比如undefined
和null
//toString() //变量.tostring() //数据.tostring() //不能转null 和 undefined console.log(typeof test.toString()); console.log(typeof 100e5.toString()); console.log(typeof 123.45.toString()); //console.log(typeof null.toString());//不可以转会报错 var test1 = true; console.log(typeof test1.toString()); var test3; //console.log(typeof test3.toString());//不可以转会报错
-
String(变量)
所有数据类型都可以
var test = 100; console.log(typeof test); //string() //任何类型都可以使用这个转成字符串 //原样显示 var y1; console.log(String(y1));
-
使用加法运算
在 JS 里面,
+
由两个含义字符串拼接: 只要
+
任意一边是字符串,就会进行字符串拼接加法运算:只有
+
两边都是数字的时候,才会进行数学运算//+ 除了相加 还有拼接的作用 console.log(typeof (1 + 1 + 'abc')); //只要两边有以一个字符串,那麽就是拼接 //从左往右运算2+'abc' 2abc console.log(typeof ('abc' + 1 + 1));//abc11 开始就见到字符串 后边全是拼接
其他数据转成布尔
-
Boolean(变量)
在 js 中,只有
''
、0
、null
、undefined
、NaN
,这些是false
其余都是
true
// 数值 整数 浮点数 科学计数 非数字NaN 0 0.0 // 字符串 "adsf" 'adf' `adf` '' "" // 布尔 true false // null undefined // 复杂数据类型 // function console.log(Boolean(0)) console.log(Boolean(0.0)) console.log(Boolean('abc'/123)) console.log(Boolean('')) console.log(Boolean("")) console.log(Boolean(true)) console.log(Boolean(false)) console.log(Boolean(null)) var test; console.log(Boolean(test) console.log(Boolean(-9999999999e88888888888)) // 0 0.0 NaN "" '' false null undefined // 复杂数据类型 引用类型中 如果是空的 结果一定是false // 重点 后边判断 逻辑运算 都会用到 // 转字符串 转数值 转 布尔 上面的都是 明着转换 // 后边知识点 很多隐式转换 // 负无穷 是true
-
-
运算符
- 就是在代码里面进行运算的时候使用的符号,不光只是数学运算,我们在
js
里面还有很多的运算方式
数学运算符
-
+
只有符号两边都是数字的时候才会进行加法运算
只要符号任意一边是字符串类型,就会进行字符串拼接
// + // 求和 两边都是数值 或者 布尔 // 拼接 只要两边有一个是字符串 那么+ 充当拼接的功能 console.log(1+2) // 3 console.log(true+false) // 隐式转换 true 1 false 0 结果 1 console.log(1+1+'abc') // 2abc console.log('abc'+'def'+1+2+4)
-
-
会执行减法运算
会自动把两边都转换成数字进行运算
// - console.log(100-123) // -23 console.log('abc'-123)// NaN console.log(true-false) //1
-
*
会执行乘法运算
会自动把两边都转换成数字进行运算
//* console.log(100/50) //2 console.log(100/0) // Infinity 分母为0 返回正无穷 // ** 平方 console.log(2**3) // 8
-
/
会执行除法运算
会自动把两边都转换成数字进行运算
-
%
会执行取余运算
会自动把两边都转换成数字进行运算
// % console.log(100%3);//1
练习
//16789秒
var time=16789;
//分钟
min=parseInt(time%3600/60);//分钟
hour=parseInt(time/3600);//小时
s=parseInt(time%60);//秒
console.log('16789秒是'+hour+"小时,"+min+'分钟'+s+'秒')
//提取百位 十位 个位
// 895
var num=895;
bai=parseInt(num/100);
shi=parseInt(num%100/10);
ge=parseInt(num%10);
console.log('895的百位数是'+bai ,'895的十位数是'+shi,'895的个位数是'+ge);
赋值运算符
-
=
就是把
=
右边的赋值给等号左边的变量名var num = 100
就是把 100 赋值给 num 变量
那么 num 变量的值就是 100
-
+=
var a = 10; a += 10; console.log(a); //=> 20
a += 10
等价于a = a + 10
-
-=
var a = 10;
a -= 10; console.log(a); //=> 0
a -= 10
等价于a = a - 10
-
*=
var a = 10; a *= 10; console.log(a); //=> 100
a *= 10
等价于a = a * 10
-
/+
var a = 10; a /= 10; console.log(a); //=> 1
a /= 10
等价于a = a / 10
-
%=
var a = 10; a %= 10; console.log(a); //=> 0
a %= 10
等价于a = a % 10
比较运算符
判断两个数据类型是否一致(补充)
//objiect.is(数据1,数据2)
//判断两个数据是否一致 返回的是一个布尔类型的结果
//一致为true 不一致为false
alert(Object.is(1,'1'))//false
alert(Object.is(1,1))//true
alert(null==undefined)//true
alert(Object.is(null,undefined));//false
alert(Object.is(NaN,NaN))//true
-
==
-
比较符号两边的值是否相等,不管数据类型 >
1 == '1'
两个的值是一样的,所以得到
true
-
-
===
-
比较符号两边的值和数据类型是否都相等 >
1 === '1'
两个值虽然一样,但是因为数据类型不一样,所以得到
false
console.log(1==1)// true console.log('1'==1) // true // // 两个= 仅仅是判断值是否相等 不判断类型 console.log('1'===1) // false === 判断值和类型是否都相等 // = 赋值 // == 值是否相等 (只判断值,不判断类型) // === 值和类型是否都相等 console.log(NaN == NaN) console.log(undefined == null) // true // undefined 派生自 null console.log(undefined === null) // false 因为类型不一致 console.log(1 == true) // true console.log(1 === true) // false 因为类型不一致
-
-
!=
-
比较符号两边的值是否不等 >
1 != '1'
因为两边的值是相等的,所以比较他们不等的时候得到
false
-
-
!==
-
比较符号两边的数据类型和值是否不等 >
1 !== '1'
因为两边的数据类型确实不一样,所以得到
true
// console.log(1!='2') //判断值是否不相等 如果不相等 true 否则 false // console.log(1!=='2')// 判断值和类型是否都不相等 是 返回给true 否则 false
-
-
>=
-
比较左边的值是否
大于或等于
右边的值 >
1 >= 1
结果是true
1 >= 0
结果是true
1 >= 2
结果是false
-
-
<=
-
比较左边的值是否
小于或等于
右边的值 >
1 <= 2
结果是true
1 <= 1
结果是true
1 <= 0
结果是false
-
-
>
-
比较左边的值是否
大于
右边的值 >
1 > 0
结果是true
1 > 1
结果是false
1 > 2
结果是false
-
-
<
-
比较左边的值是否
小于
右边的值 >
1 < 2
结果是true
1 < 1
结果是false
1 < 0
结果是false
-
逻辑运算符
优先级:非 与 或
-
&&
-
进行 且 的运算 >
符号左边必须为
true
并且右边也是true
,才会返回true
只要有一边不是
true
,那么就会返回false
true && true
结果是true
true && false
结果是false
false && true
结果是false
false && false
结果是false
// 逻辑运算符的结果 不一定是布尔类型,会输出原结果 // 逻辑与 && 两边都是true 结果才是true // 两边只要有一个是false 整个结果就是false var test= true && true && true && false && true console.log(test) // false var test1= true && true && true && true && true console.log(test1) // true var test5= true && true && true && false && true // 遇到false 停止向右走 console.log(test5) // false var test4 = 'abc' && 123 && true && [1,2,3,'haha',true] && 123.45; console.log(test4);//123.45 // 遇到false 停止向右 var test6 = 'haha' && 123 && '' && 0 && 0.0 & 100 console.log(test6) // 0
-
-
||
-
进行 或 的运算 >
符号的左边为
true
或者右边为true
,都会返回true
只有两边都是
false
的时候才会返回false
true || true
结果是true
true || false
结果是true
false || true
结果是true
false || false
结果是false
// 逻辑或 || 两边只要有一个是true 整个结果就是true // 两边都是false 整个结果就是false var test2 = true || false || false || true console.log(test2) // true var test3 = false || false || false || false console.log(test3) // false // 遇到true 停止向右判断 var test7 = 100 || 0 && 0.0 && NaN console.log(test7) // 100
-
-
!
-
进行 取反 运算 >
本身是
true
的,会变成false
本身是
false
的,会变成true
!true
结果是false
!false
结果是true
// 逻辑非 ! true-> false false-> true console.log(!true) //false console.log(!100) // false
-
练习
var year = 2000
// (能被4整除 && 并且不能被100整除) 或者 || ( 能被400整除)
console.log((year%4==0 && year % 100 !=0) || year % 400 ==0)
// 身高m 体重 kg
// 体重kg / 身高m的平方 如果在 大于等于18.5 小于等于24.9
var kg = 1.65;
m = 60;
y = (m / (kg ** 2)) >= 18.5 && ((m / (kg ** 2)) <= 24.5);
console.log(y);
拆分百位数
// //拆分百位数
var t = parseInt(origin / 1000); // 千位
console.log(parseInt(origin % 1000 / 100)); // 2
console.log(parseInt((origin-t*1000)/100)); // 2
var h = parseInt((origin-t*1000)/100); //
// //拆分十位数
var ten = parseInt(origin %100 / 10); // 千位
var ten =parseInt((origin-t*1000-h*100)/10); // 千位
console.log(ten); // 3
// //拆个位
var one = origin % 10; // 个位
console.log(one); //
单位换算
var origin = 1234567;
var day = parseInt(origin / (60*60*24)); // 天
var hours = parseInt(origin % (60*60*24) / (60*60)); // 小时
var minutes = parseInt(origin % (60*60) / 60); // 分钟
var seconds = parseInt(origin % 60); // 秒
console.log(day+'天'+hours+'小时'+minutes+'分钟'+seconds+'秒');
console.log(`${day}天${hours}小时${minutes}分钟${seconds}秒`);
四舍五入保留小数
/* 1. 小明要到美国旅游,可是那里的温度是以华氏度为单位记录的。
- 它需要一个程序将华氏温度(80度)转换为摄氏度,并以华氏度和摄氏度为单位分别显示该温度。
- 提示:摄氏度与华氏度的转换公式为:摄氏度 = 5/9.0*(华氏度-32)保留3位小数
100.45678.toFixed(2); => 100.46 会四舍五入*/
var fah=80;
cel=parseFloat(5/9.0*(fah-32)).toFixed(2);//方法一:使用函数
console.log('华氏摄氏为:'+fah,"摄氏度为:"+ cel);
var num3 = 'abc';
console.log(Number(num3));//NaN
// console.log(('abc' + '123'));
方法小结:
var sheshi = 5/9.0*(huashi-32) // 123.456789
parseInt(sheshi*1000)/1000 //不考虑四舍五入的情况
var num = 1234567 % 10 = 7
if(num>=5){
console.log(parseInt(shezhi*1000+1)/1000)
} // 考虑四舍五入
console.log(sheshi.toFixed(3)) // 使用系统系统的方法实现
自增自减运算符(一元运算符)
-
++
-
进行自增运算
-
分成两种,前置++ 和 后置++
-
前置++,会先把值自动 +1,在返回
var a = 10; console.log(++a); // 会返回 11,并且把 a 的值变成 11
-
后置++,会先把值返回,在自动+1
var a = 10; console.log(a++); // 会返回 10,然后把 a 的值变成 11
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SzU8oj8z-1660984205757)(C:\Users\hp\Desktop\JN-课上笔记\JS上课资料\QQ图片20220816165743.png)]
-
-
--
- 进行自减运算
- 分成两种,前置– 和 后置–
- 和
++
运算符道理一样
练习
var n= 5
var res = n++ + ++n + ++n + n++
// 5 + 7 +8+8
console.log(res)
console.log(n)//n=9
var res2 = n++ + ++n + --n + n-- - --n+ ++n
// res2 =9 +11+10+10-8+9
// n =10 11 10 9 8 9
IF 条件分支结构(重点)
if 语句
-
通过一个
if
语句来决定代码是否执行 -
语法:
if (条件) { 要执行的代码 }
-
通过
()
里面的条件是否成立来决定{}
里面的代码是否执行// 条件为 true 的时候执行 {} 里面的代码 if (true) { alert('因为条件是 true,我会执行') } // 条件为 false 的时候不执行 {} 里面的代码 if (false) { alert('因为条件是 false,我不会执行') }
if else 语句
-
通过
if
条件来决定,执行哪一个{}
里面的代码 -
语法:
if (条件) { 条件为 true 的时候执行 } else { 条件为 false 的时候执行 }
-
两个
{}
内的代码一定有一个会执行// 条件为 true 的时候,会执行 if 后面的 {} if (true) { alert('因为条件是 true,我会执行') } else { alert('因为条件是 true,我不会执行') } // 条件为 false 的时候,会执行 else 后面的 {} if (false) { alert('因为条件为 false,我不会执行') } else { alert('因为条件为 false,我会执行') }
三元运算(扩展)
-
三元运算,就是用 两个符号 组成一个语句
-
三元运算只是对 if else 语句的一个简写形式
-
语法:
条件 ? 条件为 true 的时候执行 : 条件为 false 的时候执行
var age = 18; age >= 18 ? alert('已经成年') : alert('没有成年')
SWITCH 条件分支结构(重点)
-
也是条件判断语句的一种
-
是对于某一个变量的判断
-
语法:
switch (要判断的变量) { case 情况1: //case:后边可以加数字或者是字符串 情况1要执行的代码 break;//阻断程序往下执行,如果不写 就会继续穿透到下一结果/情况 case 情况2: 情况2要执行的代码 break case 情况3: 情况3要执行的代码 break default: 上述情况都不满足的时候执行的代码 }
- 要判断某一个变量 等于 某一个值得时候使用
-
例子🌰: 根据变量给出的数字显示是每个月几天
var month = parseInt(prompt('请输入月份'));
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
alert("这个月是31天");
break;
case 2:
alert('这个月是28天');
break;
case 4:
case 6:
case 9:
case 11:
alert('这个月是30天');
break;
default:
alert('请输入正确月份')
}
循环结构(重点)
- 循环结构,就是根据某些给出的条件,重复的执行同一段代码
- 循环必须要有某些固定的内容组成
- 初始化
- 条件判断
- 要执行的代码
- 自身改变
WHILE 循环
-
while
,中文叫 当…时,其实就是当条件满足时就执行代码,一旦不满足了就不执行了 -
语法
while (条件) { 满足条件就执行 }
-
因为满足条件就执行,所以我们写的时候一定要注意,就是设定一个边界值,不然就一直循环下去了
// 1. 初始化条件 var num = 0; // 2. 条件判断 while (num < 10) { // 3. 要执行的代码 console.log('当前的 num 的值是 ' + num) // 4. 自身改变 num = num + 1 }
- 如果没有自身改变,那么就会一直循环不停了
DO WHILE 循环
-
是一个和
while
循环类似的循环 -
while
会先进行条件判断,满足就执行,不满足直接就不执行了 -
但是
do while
循环是,先不管条件,先执行一回,然后在开始进行条件判断 -
语法:
do { 要执行的代码 } while (条件)
// 下面这个代码,条件一开始就不满足,但是依旧会执行一次 do 后面 {} 内部的代码 var num = 10 do { console.log('我执行了一次') num = num + 1 } while (num < 10)
do while 与 while的区别
当初始化一个变量时,如果在循环外面,do while 会执行一次代码
while不会执行
var n=0;
do{
console.log(`围着操场跑了${n}圈`);
n++;
}while(n<0);
//围着操场跑了0圈
while(n<0){
console.log(`围着操场跑了${n}圈`);
n++;
}//程序不会执行
FOR 循环
-
和
while
和do while
循环都不太一样的一种循环结构 -
道理是和其他两种一样的,都是循环执行代码的
-
语法:
for (var i = 0; i < 10; i++) { 要执行的代码 }
// 把初始化,条件判断,自身改变,写在了一起 for (var i = 1; i <= 10; i++) { // 这里写的是要执行的代码 console.log(i) } // 控制台会依次输出 1 ~ 10
-
这个只是看起来不太舒服,但是用起来比较好用
for(var n=1; n<=100;n++){
console.log(n);//把1-100打印出来
sum+=n;//求和
if(){
//求其他的条件
}
}
console.log(sum);//打印和
九九乘法表
//5行5列,矩形
for (var n=1;n<=5 ;n++){
for(m=1;m<=5;m++){
document.write(n);
}
document.write('<br/>');
}
//直角三角形
for (var n=1;n<=9 ;n++){
for(m=1;m<=n;m++)//每一列要参照行数来定,所以列数小于行数
{
document.write(`${n}*${m}=`+n*m+' ');//每一列
}
document.write('<br/>');//每一行换行,不加会变成一行
}
BREAK 终止循环
-
在循环没有进行完毕的时候,因为我设置的条件满足,提前终止循环
-
比如:我要吃五个包子,吃到三个的时候,不能在吃了,我就停止吃包子这个事情
-
要终止循环,就可以直接使用
break
关键字for (var i = 1; i <= 5; i++) { // 没循环一次,吃一个包子 console.log('我吃了一个包子') // 当 i 的值为 3 的时候,条件为 true,执行 {} 里面的代码终止循环 // 循环就不会继续向下执行了,也就没有 4 和 5 了 if (i === 3) { break } }
CONTINUE 结束本次循环
-
在循环中,把循环的本次跳过去,继续执行后续的循环
-
比如:吃五个包子,到第三个的时候,第三个掉地下了,不吃了,跳过第三个,继续吃第四个和第五个
-
跳过本次循环,就可以使用
continue
关键字for (var i = 1; i <= 5; i++) { // 当 i 的值为 3 的时候,执行 {} 里面的代码 // {} 里面有 continue,那么本次循环后面的代码就都不执行了 // 自动算作 i 为 3 的这一次结束了,去继续执行 i = 4 的那次循环了 if (i === 3) { console.log('这个是第三个包子,掉地下了,我不吃了') continue } console.log('我吃了一个包子') }
函数(上)
- 我们代码里面所说的函数和我们上学的时候学习的什么三角函数、二次函数之类的不是一个东西
函数的概念
-
对于
js
来说,函数就是把任意一段代码放在一个 盒子 里面 -
在我想要让这段代码执行的时候,直接执行这个 盒子 里面的代码就行
-
先看一段代码
// 这个是我们以前写的一段代码 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 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()
判断一个数是不是质数
var n = parseInt(prompt('请输入一个数字'));
function fun(n) {
//对100-200进行过滤,任何数字都能被1和本身整除
//以100为例:如果2-99里有一个数可以被100整除,那么100就不是质数
var flag = true;//假如是质数,是真的
for (var m = 2; m < n; m++) {
if (n % m == 0) {
flag = false;
return "不是质数";//只是把结果给到你,输出的话需要加alert
}
}
if (flag) {
return '是质数'
}
}
alert(fun(n));