zoukankan      html  css  js  c++  java
  • 函数声明与表达式、匿名函数与具名函数、立即执行函数

    定义函数的三种方式:

    • 函数声明:function  函数名称(参数){函数体}
    • 表达式:var express = function 函数名称(参数){函数体}
    • 构造函数:var fun = new function()

    一、函数声明

    函数声明是以关键字开头的,它有一个明显的特征:函数声明的提升,js在解析代码时将函数声明提升到当前作用域的顶部,所以把函数声明放在调用他的语句后面

    foo("hello");   //输出  hello
    
    function foo(name){
    
    console.log(name);
    
    }
    1. 函数声明与表达式的区分

    就是看关键字function在声明中的位置,他的位置是整个函数中的位置,如果function是声明中的第一个位置,那就是函数声明,否则就是表达式

    1  (function(){...}());//函数表达式
    2 
    3     +function test(){...}//函数表达式
    4 
    5    (function(){//function既不是函数声明也不是函数表达式,只是一个参数
    6         ...
    7     },1000);    

        2.差异

     名称和标识符的绑定位置

     1  var a = 2;
     2     function foo() { 
     3         var a = 3;
     4         console.log( a ); // 3
     5     } 
     6     foo(); 
     7     console.log( a ); // 2
     8 
     9     /*---------*/
    10 
    11     (function foo(){ 
    12         var a = 3;
    13         console.log( a ); // 3
    14     })(); 
    15     console.log( a ); // 2  

    第一个片段中的foo被绑定在所在作用域中,可以通过foo()来调用,第二个片段中foo被绑定在函数表达式自身的的函数中而不是作用域中

    也就是说匿名函数作为函数表达式意味着foo只能在它所代表的位置访问,也就是指局部作用域,优点就是不会被全局污染

    二、匿名与具名函数

    • 具名函数和匿名函数的区别:看关键字·function后的函数名称,有函数名称的是具名函数,没有的是匿名函数
     1     setInterval(function(){//匿名函数
     2         ...
     3     },1000);
     4 
     5     
     8 
     9     var funA = function(){//匿名函数表达式
    10         ...
    11     }
    12 
    13     var funB = function test(){
    14         ...
    15     }

    三、立即执行函数

     1 var express=function () {
     2 
     3 console.log("hello word!");
     4 
     5 }();    //运行,发现函数直接执行,结果输出了"hello word!"
     6 
     7  
     8 
     9 function () {
    10 
    11 console.log("hello word!");
    12 
    13 }();   //报错    Uncaught SyntaxError: Unexpected token )   
    14 
    15 // 因为以function开头,认为是函数声明,结果没有函数名,就报错了
    16 
    17  
    18 
    19 function foo() {
    20 console.log("hello word!");
    21 }();   //报错    Uncaught SyntaxError: Unexpected token ) 

    在函数表达式后面紧跟一小括号(),函数就会立即执行,两大要点:表达式、括号()

    (function 函数名称(可写可不写) (参数){函数体}  ());

    立即执行函数只要知道只有表达式才能执行,函数表达式也会被执行,其他除外

  • 相关阅读:
    全局变量、函数、文件基本操作、冒泡排序
    元组,字符串,集合,文件操作
    Python使用小技巧
    pycharm
    postman和charles
    将博客搬至CSDN
    垃圾陷阱
    codevs 1139 观光公交
    1159 最大全0子矩阵
    NOI 193棋盘分割.cpp
  • 原文地址:https://www.cnblogs.com/zycs/p/13508844.html
Copyright © 2011-2022 走看看