zoukankan      html  css  js  c++  java
  • 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

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

    作者:epines
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    值传递和引用传递(不是引用类型的传递)的区别
    字符串一旦定义,就表示开辟好了指定的空间,其内容就不可改变
    String类的直接赋值和构造方法赋值的区别
    字符串常量是String类的匿名对象
    Integer和int的区别(转)
    final的好处
    数组引用传递
    构造代码块
    ==和equals()的不同点
    Redis数据类型底层实现
  • 原文地址:https://www.cnblogs.com/epines/p/9144917.html
Copyright © 2011-2022 走看看