• JavaScript(1)——变量、函数声明及作用域


       这是我的第一篇博客文章,本人不才,文笔也不好,所以可能写的有点凌乱。有什么不对的地方还望见谅。不过每天进步一小步,总有一天会迈出那一大步。以下内容是我对变量、函数声明及函数表达式、作用域的理解。

    【变量】
    大意上来讲,变量就是所定义的一个可以用来保存值的占位符。定义变量时要使用var操作符。

    变量所保存类型可以被改变,但不建议。

    var操作符定义的变量将成为该变量的作用域中的局部变量,在函数退出后,变量将被销毁。

    若省略var操作符可以定义全局变量,不过在严格模式下会导致抛出ReferenceError错误。

    用一条语句可以定义多个变量,只要把每个变量用逗号分开即可。

    如:var massage="hi",
    found=false;

    在严格模式下,不能定义名为eval或arguments的变量,会导致语法错误。

    【函数声明及函数表达式】

    函数:被定义一次,可执行和调用多次,JS中的函数也是对象,JS函数可以像其他对象那样操作和传递。

    常见的两种创建函数的方法:函数声明跟函数表达式。

    函数声明:一个完整的语句以function开头,不加任何东西。如:function 函数名(参数){函数体}

    函数表达式:有四种表现形式。把一个匿名函数表达式,赋值给一个变量。如:var 变量=function(参数){函数体};

          把一个匿名函数直接用括号括起来,然后直接调用。如:(function(){函数体})();

          让函数对象作为一个返回值。如:return function(){函数体};

          把函数表达式非匿名(),赋值给一个变量。如:var 变量=function 函数名(参数){函数体};

    区别:函数声明会被前置。解析器会率先读取函数声明,并使其在执行任何代码之前可以访问;至于函数表达式,则必须等到解析器执行到它所在代码行,才会真正被解释执行。

    【作用域】

    作用域就是函数跟变量可以访问的一个范围,其中有两个重要概念就是函数作用域跟块级作用域,但是在JS中,没有块级作用域。

    块级作用域:在其他类C语言中,由{}封闭的代码块。如:if{}、for(){}。在其他类C语言中,if语句中的变量会在if语句执行完了之后被销毁,然而在JS中,if语句的变量声明会将变量添加到当前的执行环境中。

    在JS中有全局作用域,函数作用域跟eval作用域。全局作用域一般声明在最外层,而函数作用域拥有自己的独立作用域,在函数之外是无法访问函数内部的变量。

    当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链是保证对执行环境有权访问的所有变量跟函数的有序访问。作用域链的前端,始终都是当前执行的代码所在环境的变量对象。作用域链中的下一个变量对象来自包含(外部)环境,而再下一个变量对象则来自下一个包含环境。一直延续到全局执行环境,全局执行环境的变量对象始终是作用域链中的最后一个对象。

    在执行环境中,内部环境可以通过作用域链访问所有的外部环境,外部环境不能访问内部环境中的任何变量和函数,环境之间的联系是线性,有次序的。

    执行环境总共有全局跟局部两种类型,但还可以通过其他方法延长作用域链。可以在作用域链前端临时增加一个变量对象,而该变量对象会在代码执行后被移除。如下:

    try-catch语句的catch块:会创建一个新的变量对象,包含的是被抛出错误对象的声明。

    with语句:会将指定的对象添加到作用域链中。

     

  • 相关阅读:
    1021 个位数统计
    1020 月饼
    1019 数字黑洞
    1018 锤子剪刀布
    1017 A除以B
    1016 部分A+B
    1015 德才论
    1014 福尔摩斯的约会
    cocos2d 间隔动作
    cocos2d 瞬时动作
  • 原文地址:https://www.cnblogs.com/wlfsmile/p/5850432.html
Copyright © 2020-2023  润新知