js 函数声明和函数表达式

今天我们来讲函数声明和函数表达式

主要从函数定义和两种定义的区别,以及块级作用域来讲

一、函数定义

定义函数有两种方式,一种是函数表达式,一种是函数声明式

//函数声明式
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

其实函数的声明和表达式挺简单的,大家要注意一下里面的区别就比较好了。

猜你喜欢

转载自www.cnblogs.com/epines/p/9144917.html