函数名(){
函数体
}
函数调用:函数名()
函数名称的命名规则:
1. 大小写字母、下划线、美元符号、数字均可使用
2. 数字不能以以下形式开头
3.不要使用关键字和保留字
4.变量名建议用名词定义,函数名建议用动词定义
5、函数名中尽量不要使用下划线连接多个单词,而是使用小驼峰命名法
预解析:
js中有预解析——特点就是所谓的变量声明、函数声明提升、声明过程提升到当前作用域的前面
// 第1题
console.log(num);
var num = 100;
undefined
// 第2题
fn();
function fn() {
console.log(123);
}
123
// 这里无法调用,因为目前这里的fn1是undefined
//fn1(); // 类型错误 fn1 is not a function
// 函数表达式-赋值式函数
var fn1 = function () {
console.log("Naruto!");
};
// 这里可以执行
fn1()
预解析总结:
1、将匿名函数赋值给变量的定义方法在预解析时遵循变量的预解析规则,不预解析函数代码
2.预解析时,定义会提前放到内存中,赋值不会提前放到内存中
3、如果变量名和函数名重名,则保留函数预解析,忽略变量预解析
因为函数预解析实际上包含了赋值的过程,所以当函数定义放到内存中的时候,函数的代码也放到了内存中
变量的预解析只有空间而没有值,所以如果先对变量进行预解析,那么后续的函数预解析赋值就会将值放到空间中,
如果是先预解析的函数,当再次预解析变量时,空间已经存在,再次定义空间就没有意义了。
4.省略var定义的变量将不会被预解析
5、如果js代码报错,则不会执行以下代码
6、代码中不会被执行的变量或函数定义也会被预解析,因为预解析是在执行之前进行的。
匿名函数:
当将函数赋值给变量时,函数名是没有用的,所以我们可以省略函数名:
语法:
var f = (){
.日志(12)
}
调用:f()
匿名函数用括号括起来,然后用括号调用。
语法2:
((a,b){
var c = a + b;
.write(c);
})(1,2);
自执行功能:
可以在自执行函数前面加分号; 感叹号!波形符~也可以使用括号()来包裹函数
语法:
;(function(){
var str=''
console.log('自执行函数2');
})()
局部变量:在js中,ES6之前,只有函数中声明的变量才是局部变量;
全局变量:其他场景声明的变量都是全局变量
功能参数
为什么函数有参数?
进一步提高函数的复用性
函数参数分为两部分:实参和形参
1、函数声明时传递参数——形式()参数(数字)
函数名(参数1、参数2...){函数体}
2、函数调用时传递参数——实际(实际)参数(数字)
函数名(参数1,参数2...)
当形参数量与实参数量不同时:
如果实参个数小于形参个数,则未赋值的形参值为
如果实参个数大于形参个数,那么多余的实参如果不带形参接收,不受影响
形式参数与全局变量同名。 在我们的函数中,我们使用全局变量还是形式参数?
全局变量可以在函数内部使用
但是如果全局变量与函数内部的局部变量同名,我们更喜欢在函数内部使用局部变量
知识拓展:
可以获取实参的值,形成伪数组;
.log() 一个由实际参数组成的伪数组对象;
函数返回值:
1.可以在函数中使用关键字,让函数有返回值
;
2.直接使用函数调用代码给变量赋值,那么变量中就会接收到函数的返回值(函数的执行结果)
var res = 函数名(); .log(res);
3.如果函数本身不存在,而我们使用变量来接收函数的返回值,我们会得到
4.下面的代码不会被执行,相当于提前结束函数
5.是的,但是后面没有值,那么返回值仍然是
6. 和值应该写在同一行
7. 它将终止代码并继续运行
8、函数运行后返回一个结果,且只能返回一个结果
封装函数:判断一个数是不是水仙花数 有参数,有返回值
function isNarcissisticNumber(num) {
if (num < 100 || num > 999) {
console.log("请输入正确的三位数");
return ;
}
var a = parseInt(num / 100);
var b = parseInt((num / 10) % 10);
var c = num % 10;
if(a**3+b**3+c**3===num){
return num+'是水仙花数'
}else{
return num+'不是水仙花数'
}
}
var result=isNarcissisticNumber(153);
console.log(result);
用函数判断一个数字是否是素数 有参数,有返回值
function getNumberType(num) {
var flage = true;
for (var i = 2; i < num / 2; i++) {
if (num % i === 0) {
flage = false;
break;
}
}
if (flage) {
console.log(num + "是素数");
} else {
console.log(num + "是合数");
}
}
var result = getNumberType(15);
//分别获取4位数的 千位 百位 十位 个位
var a = parseInt(num / 1000);
var b = parseInt(num / 100 % 10);
var c = parseInt((num / 10) % 10);
var d = num % 10;