zoukankan      html  css  js  c++  java
  • 函数作用域及函数表达式

    一、函数作用域

      在JavaScript中,作用域分为全局作用域及函数作用域(局部作用域);

      例如:

    var num = 100;
                function fun(){
                    console.log(num)
                    var num1 = 200;
                    function fun2(){
                        console.log(num1);
                    }
                }
                fun()

      执行后都会正常输出num及num1的值,
      用var定义的变量,在函数外定义的为全局变量,在函数内定义的为局部变量,作用域有所不同,但全局变量是相对的,如上对num1的定义对函数内的fun2函数同样产生了全局变量的效果。

    function fun (){
                    var num = 100;
                }
                fun();
                console.log(num);

      但如果是这样,在函数里面定义在函数外面输出,结果就是undefined。

    function fun (){
                    num = 100;
                }
                fun();
                console.log(num);

      另外,如果变量不通过var来定义而是直接定义,那么就是一个全局变量,如上就会正常输出。

    二、函数声明和函数表达式

      1、函数声明和函数表达式分别是什么

        我们常见的函数写法如 function fun(){ } 这样的称之为函数声明

                                             fun = function (){ } 这样的称之为函数表达式

      2、函数声明和函数表达式的区别

        对于函数表达式而言,函数名可有可无,而对于声明函数,需通过函数名来调用;

        函数表达式可以直接被执行符号执行:

    var fun2 = function(){    //函数表达式
                    console.log("world");
                }()

        那么对于函数声明就不能这么执行了,但是,在函数声明前面加上+-!可以让函数声明变成函数表达式:

    +function fun(){    //函数声明
                    console.log("hello");
                }()
    //            在函数的前面可以加上+-!可以让函数声明变成函数表达式

      3、立即执行函数

        什么是立即执行函数:函数声明了以后直接自己执行,用函数的返回值,适合做初始化的工作。

        如:

    +function(){        //立即执行函数
                    console.log("hello")
                }()

        这就是一个立即执行函数;

        

        当立即执行函数中参数并没有给定的时候,输出参数为undefined

    function fun(a,b){
                    console.log(a);
                    console.log(b)
                }
                fun(3)

        如上,输出的a为3,输出的b为undefined。

        

        另外,例如:

    var abc = "helloworld"
            
                (function(){    //写功能型的时候,在立即执行函数前面加上分号
                    console.log(456)
                })()

        这样在运行的时候会报错,

        在JavaScript中,一般情况未添加的“;”会自动补全,但是在写功能性的时候注意,在立即执行函数前面加“;”。

  • 相关阅读:
    Cloudstack安装(二)
    Cloudstack介绍(一)
    [Python爬虫] 之二十二:Selenium +phantomjs 利用 pyquery抓取界面网站数据
    [Python爬虫] 之二十一:Selenium +phantomjs 利用 pyquery抓取36氪网站数据
    [Python爬虫] 之二十:Selenium +phantomjs 利用 pyquery通过搜狗搜索引擎数据
    [Python爬虫] 之十九:Selenium +phantomjs 利用 pyquery抓取超级TV网数据
    [Python爬虫] 之十八:Selenium +phantomjs 利用 pyquery抓取电视之家网数据
    [Python爬虫] 之十七:Selenium +phantomjs 利用 pyquery抓取梅花网数据
    pycharm2016序列号失效问题解决办法
    scrapy-splash抓取动态数据例子十六
  • 原文地址:https://www.cnblogs.com/lznzxy/p/10130645.html
Copyright © 2011-2022 走看看