判断是否是质数:
function judgeisprime(number) {
var isprime = true;
for (i = 2; i < number; i++) {
if (number % i == 0) {
//说明不是质数
isprime = false;
//跳出循环
break;
}
}
if (isprime) {
console.log('是质数');
} else {
console.log('不是质数');
}
}
//函数调用
judgeisprime(9);
judgeisprime(13);
//求一组数中的最大值
function getmax(arr) {
var max = arr[0];
for (i = 0; i < arr.length; i++) {
if (max < arr[i]) {
max = arr[i];
}
}
return max;
}
var result = getmax([12, 23, 2, 3, 56, 13, 15]);
console.log(result);
//函数的返回值只能有一个,如果要返回多个数值可以使用数组的形式
// return 返回值,当没有return的时候返回的是undefied
//return后面不跟数值的时候返回的是undefied,return结束程序运行。
//求一组数中的最小值
function getmin(arr) {
var min = arr[0];
for (i = 0; i < arr.length; i++) {
if (min > arr[i]) {
min = arr[i];
}
}
return min;
}
var result = getmin([12, 23, 2, 3, 56, 13, 15]);
console.log(result);
求阶乘:
//求阶乘
var number = 1;
function jicheng(n) {
for (i = 1; i <= n; i++) {
number *= i;
}
return number;
}
var res = jicheng(5);
console.log(res);
求1!+2!+3!+....+n!
//求1!+2!+3!+....+n!
var sum = 0;
function getsum(n) {
for (i = 1; i <= n; i++) {
sum += jicheng(i);
}
return sum;
}
var res1 = getsum(5);
console.log(res1);
arguments用来获取实参的个数,非常像数组,但是不是数组 ,每个函数里面都内置了argumengts对象。
案例:求任意个数的最大值
//求任意个数的最大值
function getmax() {
var max = arguments[0];
for (i = 1; i < arguments.length; i++) {
if (max < arguments[i]) {
max = arguments[i];
}
}
return max;
}
var res2 = getmax(1, 5, 3, 2);
console.log(res2);
//求任意个数的和
var sum = 0;
function getsum() {
for (i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
var res1 = getsum(1, 2, 3, 4, 5, 6);
console.log(res1);
对数组排序,从小到大的顺序 -----冒泡排序
function sort(array) {
//外层循环控制趟数
for (i = 0; i < array.length - 1; i++) {
for (j = 0; j < array.length - 1 - i; j++) {
var issort = true;
if (array[j] > array[j + 1]) {
issort = false;
var temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
if (issort) {
break;
}
}
return array;
}
console.log(sort([12, 2, 56, 3, 78, 4]));
判断是否是闰年:
//判断是否是闰年
function isleapyear(year) {
var result = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
result = true;
}
return result;
}
console.log(isleapyear(2000));
console.log(isleapyear(1995));
输入某年某月某日,判断这一天是这一年的第几天?
function getdays(year, month, day) {
var days = day;
for (i = 1; i < month; i++) {
switch (i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days += 31;
//不要忘记break否则结果是错误的
break;
case 4:
case 6:
case 9:
case 11:
days += 30;
break;
case 2: //判断是平年 28还是闰年29
if (isleapyear(year)) {
days += 29;
} else {
days += 28;
}
break;
}
}
return days;
}
console.log(getdays(2020, 8, 22));
console.log(getdays(2020, 1, 22));
作用域:就是变量或者函数起作用的范围
变量分为全局变量和局部变量。
全局变量:在任何位置都可以访问到的变量,不使用var定义的变量是全局变量(不推荐使用)
局部变量:只在固定的代码片段内可以访问的变量,最常见的就是函数内部。
块级作用域
任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。 在es5之前没有块级作用域的的概念,只有函数作用域,现阶段可以认为JavaScript没有块级作用域。
预解析
JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程
预解析过程:
-
把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
-
把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
-
先提升var,在提升function。
-
预解析 var a function abc() { var a; alert(a); a=10; } a=25; abc(); var a ; function a() { console.log('aaaa'); } //当个变量名和函数命名相同时候,此时函数优先 console.log(a);//此时打印的是函数a a=1; console.log(a)// 打印的是变量a
变量提升
-
// 3、-----------------------------------
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
} -
变量提升以后 function f1() { var a a=b=c=9; // var a = b = c = 9; console.log(a); console.log(b); console.log(c); } f1(); console.log(c); console.log(b); console.log(a); //报错
var a = 18; f1(); function f1() { var b = 9; console.log(a); console.log(b); var a = '123'; }
变量提升以后结果:
var a ; function f1() { var b var a b = 9; console.log(a); //undefined; console.log(b); //9 a = '123'; } a = 18 f1();