1.匿名函数
(1)函数声明与函数表达式的对比
函数表达式
var fun=function(){
}
//调用函数
fun();
变量名称就是函数名称
普通函数也叫函数声明
function fun(){
}
fun()//调用函数
对比函数名称()和函数名称
函数名称()调用函数,执行函数体中的代码,得到返回结果
函数名称 是一个变量,变量中保持了一个函数
对比函数声明与函数表达式的区别
函数名称创建的函数存在函数整体提升,可以先写调用在写创建
函数表达式创建的函数只是存在变量声明的提升,必须先写创建在写调用
//函数最先提升,然后变量提升
//如果函数名称和变量名称相同时 变量不在提升
var c = 2; //重新给c赋值
function c() { //函数会提升 函数第一 变量第二 =//var c=function(){}
console.log(3);
}
c(); //函数先提升 报错, c是一个数字2 不是一个函数
使用函数表达式创建函数,传递任意两个参数,计算两个数字之间所有整数的和,返回结果
var getSum = function (n1, n2) {
//循环产生出n1~n2所有整数
for (var i = n1, sum = 0; i <= n2; i++) {
sum += i;
}
return sum;
}
console.log(getSum(1, 100));
(2) 匿名函数的自调用
为了防止全局无染
(function(){
//函数作用域,变量是局部变量
})();//自调用括号里的参数
函数自调用 可以用来网页轮播图 因为实际开发变量可能会相同 函数自调用可以防止全局污染
全局污染:全局变量的出现带来的影响
解决全局污染:都转为局部变量
(function(a){
//函数作用域,变量是局部变量
var num=5;
console.log(num,a)
})(9)
(3)回调函数
将函数作为参数传递
function a(add){
add() //调用传递进来的函数
}
function b(){
}
a(b) //函数b作为参数传递就是回调函数
//还有可以用匿名函数作为参数传递
a (function( ){ })//匿名函数作为参数传递也是回调函数
function a(add) {
console.log('这是第一个函数');
//实参会赋值个形参
//就是add=b
//通过参数add来调用b传递回来的函数
add();//相当于调用b()
}
function b() {
console.log('这是第二个函数')
}
//(a(b)) 不要加括号 会报错
a(b) //将函数b作为实参参数传递,这叫做回调函数
2.系统函数
isNaN()检测一个值是否为NaN,会隐式转换为数值,是NaN->true 不是NaN->false
var str='1a';
//isNaN(),会将数据隐式转数为数值
console.log(Number(str));//NaN //内部会先执行这句 转数值在检测是否是NaN
console.log( isNaN(str));//true
判断用户输入的数字的值是否为NaN,如果NaN打印'请提供一个数字' 否则打印'错误格式'
var a = '1';
if (isNaN(a)) {
console.log('请提供一个数字')
} else {
console.log('格式正确')
}
eval() 执行字符串表达式
//eval 评价评估意思
console.log('1+2'); //'1+2'
console.log(eval('1+2')); //3
console.log('parseInt(6.18)'); //'parseInt(6.18)'
console.log(eval('parseInt(6.18)')); //6
//如果用eval单词语法错误 也会报错