• 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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    选择器的区别
    固定DIV样式
    图片自适应不变形
    CSS实现图片在div a标签中水平垂直居中
    2017年校招全国统一模拟笔试 页码统计
    LeetCode 23. Merge k Sorted Lists
    LeetCode 15. 3Sum
    LeetCode 12. Integer to Roman
    LeetCode 11. Container With Most Water
    LeetCode 8. String to Integer (atoi)
  • 原文地址:https://www.cnblogs.com/epines/p/9144917.html
Copyright © 2020-2023  润新知