今天我们来讲函数声明和函数表达式
主要从函数定义和两种定义的区别,以及块级作用域来讲
一、函数定义
定义函数有两种方式,一种是函数表达式,一种是函数声明式
//函数声明式 function fun(arguments){ //..... } //函数表达式 var fun=function(arguments){ //...... }
二、区别
1、变量提升
只有通过函数声明的函数,才会存在变量提升,函数表达式不存在变量提升
sayhi('zhangsan'); function sayhi(name) { alert('name:'+name); } //不会报错,存在变量提升 //执行顺序 //function sayhi(name) //{ //alert('name:'+name); //} //sathi('zhangsan'); sayhello('lisi'); var syhello=function(name){ alert('name'+name); } //报错,sayhello is not a function
2、函数表达式的函数名可省略
函数声明必须有函数名是函数被调用的基本要求
var mydiv.onclick=function(){ alert(123) }
自执行函数
及常说的匿名函数
(function(a) { console.log(a) })(3) //3,这里的(3)将被作为参数传进去,立即执行
三、块级作用域
js中不存在块级作用域,存在函数作用域
for(var i=0;i<10;i++){} console.log(i);//不会报错10 //原因:变量提升
解决方案:利用es6中的语法,let定义
//let定义的变量,存在块级作用域,其作用范围在定义的{}内
for(let i=0;i<10;i++){} console.log(i)//10
其实函数的声明和表达式挺简单的,大家要注意一下里面的区别就比较好了。