函数语法
重复代码:让程序难以维护
函数主要用于减少重复代码
创建(定义、声明)函数
function 函数名 () {
//函数体
}
函数体的代码不会直接运行,必须要手动调用函数,才能运行其中的代码。
调用函数
运行函数体
函数名();
<script>
//创建函数
function printSplitor () {
console.log("=======================");
}
//调用函数
printSplitor();
</script>
函数提升
通过字面量声明的函数,会提升到脚本块的顶部。
通过字面量声明的函数,会成为全局对象的属性。 window的属性
<script>
其他特点
通过typeof 函数名,得到的结果是"function"
函数内部声明的变量:
- 如果不使用var声明,和全局变量一致,表示给全局对象添加属性
<script>
function test () {
a = 3;
}
test();
console.log(a); //3
</script>
- 如果使用var声明,变量提升到所在函数的顶部,函数外部不可以使用该变量
<script>
function test() {
console.log(a) //undefined
var a = 3; //相当于var a; a = 3;
}
test();
</script>
函数中声明的变量,仅能在函数中使用,在外部无效
<script>
function test2 () {
var a = 3;
a--;
}
var a = 5;
test2();
console.log(a); //5
</script>
参数
参数表示函数运行的未知条件,需要调用者告知的数据
//参数的有效返回在函数体中
function 函数名(参数1, 参数2, ...) {
}
函数名(实参)
如果实参没有传递,则对应的形参为undefined
<script>
//输出一个数是否是奇数
function isOdd(n) {
if (n % 2 === 0) {
console.log(n + "不是奇数");
} else {
console.log(n + "是奇数");
}
}
var nums = [234, 3, 4];
for (var i = 0; i < nums.length; i++) {
isOdd(nums[i]); //234不是奇数 3是奇数 4不是奇数
}
isOdd(5); //5是奇数
isOdd(122); //122不是奇数
isOdd(); //undefined是奇数
//输出两个数相加的结果
function sum (a, b) {
console.log(`${a}+${b} = ${a+b}`);
}
sum(3, 5); //3+5=8;
sum(234, 234, 34242, 22323); //234+234=468;
sum(123); //123+undefined=NaN;
//对一个数组求和
function sumOfArray(arr) {
var sum = 0;
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
console.log("和为:" + sum);
}
sumOfArray([2, 3, 4, 5, 6]); // 和为:20
//删除数组末尾的指定数量的数据
function deleteArray (arr, number) {
arr.splice(-number, number);
}
var nums = [1, 2, 3, 4, 5];
deleteArray(nums, 3);
console.log(nums); //[1, 2]
</script>
返回值
函数运行后,得到的结果,调用函数时,调用表达式的值就是函数的返回值
<script>
function isOdd(n) {
if (n % 2 === 0) {
return false; //返回false
} else {
return true; //返回true
}
}
var nums = [234, 34, 56, 345, 455, 777];
//输出数组中所有的奇数
var sum = 0;
for (var i = 0; i < nums.length; i++) {
if (isOdd(nums[i])) {
sum += nums[i];
}
}
console.log(sum); //1577
</script>
return 会直接结束整个函数的运行
return 后面如果不跟任何数据,返回undefined
如果函数中没有书写return, 则该函数会在末尾自动return undefined。
<script>
//对一个数组求和
function sumOfArray(arr) {
var sum = 0;
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
var num1 = [233, 455, 34, 33, 546];
var num2 = [3434, 3545, 55, 66, 77];
console.log(sumOfArray(num1) + sumOfArray(num2)); //8478
//判断一个数是不是素数
function isPrime(n) {
if (n < 2) {
return false;
}
for (var i = 2; i < n - 1; i++) {
if (n % i === 0) {
return false
}
}
return true;
}
var nums = [32, 65, 67, 45, 3, 4, 55, 9];
var sum = 0;
for (var i = 0; i < nums.length; i++) {
if (isPrime(nums[i])) {
sum += nums[i];
}
}
console.log(sum); //70
</script>
文档注释
/**
*
*
*/
/**
* nums:一个数字的数组
*/
var nums = [23, 56, 7, 4, 5, 6];
/**
* 两个数求和
* @param {number} a 第一个
* @param {number} b 第二个
*/
function sum(a, b) {
return a + b;
}
sum (1, 3)
通用函数编写
新建一个js文件,编写以下函数
- 写一个函数,该函数用于判断某个数是不是奇数
函数名参考: isOdd
/**
* 判断一个数是不是奇数
* @param {number} n 要判断的数字
* @param {boolean}
*/
function isOdd(n) {
// if (n % 2 !== 0) {
// return true;
// } else {
// return false;
// }
return n % 2 !== 0;
}
console.log(isOdd(3)); // true
- 写一个函数,该函数用于判断某个数是不是素数
函数名参考:isPrime
/**
* 判断一个数是不是素数
* @param {*} n
*/
function isPrime(n) {
if (n < 2) {
return false;
}
for (var i = 2; i < n; i++) {
if (n % i === 0) {
return false;
}
}
return true;
}
console.log(isPrime(2)); //true
console.log(isPrime(10)); //false
- 写一个函数,该函数用于对数组求和
函数名参考:sumOfArray
/**
* 对数组进行求和
* @param {*} arr
*/
function sumOfArray (arr) {
var sum = 0;
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
console.log(sumOfArray([1, 2, 3, 4, 5, 6])); //21
console.log(sumOfArray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])); //55
- 写一个函数,该函数用于得到数组中最大的值
函数名参考: maxOfArray
/**
* 得到数组中最大的值
* @param {*} arr
*/
function maxOfArray(arr) {
if (arr.length === 0) {
return;
}
var max = arr[0];
for (var i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
console.log(maxOfArray([2, 3, 4, 5,444])); //444
- 写一个函数,该函数用于得到数组中的最小值
函数名参考:minOfArray
/**
* 得到数组中最小的值
* @param {*} arr
*/
function minOfArray(arr) {
if (arr.length === 0) {
return;
}
var min = arr[0];
for(var i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
return min;
}
console.log(minOfArray([2, 3, 4, 5,444])); //1
- 写一个函数,该函数用于判断数组是否是稀松数组
函数名参考:hasEmptyInArray
/**
* 判断一个数组是不是稀松数组
* @param {*} arr
*/
function hasEmptyInArray(arr) {
//稀松数组特点:下标连续
for (var i = 0; i < arr.length; i++) {
if (!(i in arr)) {
return true;
}
}
return false;
}
console.log(hasEmptyInArray(new Array(3))); //true
- 写一个函数,判断该年是否是闰年
函数名参考: isLeap
/**
* 判断该年是否是闰年
* @param {*} year
*/
function isLeap (year) {
//4年一润,百年不润,400年一润
// if (year % 4 === 0 && year % 100 === 10 || year % 400 === 0) {
// return true;
// }
// return false;
return year % 4 === 0 && year % 100 === 10 || year % 400 === 0;
}
console.log(isLeap(2000)); //true
//输入一个年份,判断是否是闰年
var year = +prompt("请输入一个年份");
if (isLeap(year)) {
console.log("是闰年");
} else {
console.log("是平年");
}
- 写一个函数,得到某年某月的天数
函数名参考:getDays
/**
* 得到某年某月的天数
* @param {*} year
* @param {*} month
*/
function getDays (year, month) {
if (month === 2) {
return isLeap(year) ? 29 : 28;
} else if (month < 8 && isOdd(month) || month >= 8 && !isOdd(month)) {
return 31;
} else {
return 30;
}
}
console.log(getDays(2000, 2)); //29
console.log(getDays(2004, 2)); //28
console.log(getDays(2000, 8)); //31
- 写一个函数,得到某个数字数组中出现次数最多的数字和频率
函数名参考:getTopFreqInArray
/**
* 得到某个数字数组中出现次数最多的数字和频率
* 返回一个对象
* @param {*} arr
*/
function getTopFreqInArray(arr) {
var records = {}; //记录出现频率
for (var i = 0; i < arr.length; i++) {
var n = arr[i];
if (records[n]) {
records[n]++
} else {
records[n] = 1;
}
}
var result; //记录最终结果的对象
for (var prop in records) {
if (!result || records[prop] > result.frequency) {
result = {
number: prop,
frequency: records[prop]
};
}
}
return result;
}
console.log(getTopFreqInArray([2, 2, 2, 3, 4, 5, 6, 7])); //{number: "2", frequency: 3}
函数使用
- 利用上面的某些函数,实现哥德巴赫猜想
任一大于2的偶数都可写成两个质数之和,比如: 8 = 3 + 5
让用户输入一个大于2的整数,输出其等于哪两个素数相加
function begin () {
var num = +prompt("请输入一个大于2的偶数");
if (isNaN(num) || num <= 2 || isOdd(num)) {
console.log("输入有误");
return ;
}
//输入正确
for (var i = 2; i <= num - 2; i++) {
var j = num - i;
//判断两个数字是否都是素数
if (isPrime(i) && isPrime(j)) {
console.log(`${num} = ${i} + ${j}`);
return;
}
}
}
begin();
- 让用户输入一个年份,输出该年每个月的天数
function begin () {
var year = +prompt("请输入一个年份(1990~2100)");
if (isNaN(year) || year < 1990 || year > 2100) {
console.log("输入有误");
return ;
}
//输入正确
for (var m = 1; m <= 12; m++) {
console.log(`${year}年${m}月:${getDays(year, m)}`);
}
}
begin();
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!