• 学习javascript中的细节总结


    一、( . )点操作符 与( [ ] ) 方括号操作符

    (一)( . )点操作符

    var earth = person.name; //得到person对象的name属性

    点操作符的右侧是一个以属性名称命名的标识符,标识符是静态的。

    (二) [ ] 方括号操作符

    var earth = person['age']; //得到person对象的age属性

    方括号操作符的内部是一个返回结果为字符串的表达式,该字符串就是属性的名字。严格来说表达式必须返回字符串或一个可以转换为字符串的值。

    由于字符串值是动态的,所以可以再运行时更改。


    二、变量、函数作用域及作用域链

    (一)变量作用域

    变量的作用域取决于定义变量的位置,就像在全局中定义的变量,那他的作用域就是全局作用域。如果一个变量在函数内定义,那么这个变量就是局部作用域,作用于这个函数体内,值得一提的是函数的参数也属于局部变量。

    (二)函数作用域

    函数的作用域指在该函数体内声明的变量,在该函数体内是始终可以看见的。

    介于定义的函数方式有两种,一种是函数声明,一种是函数表达式。这里对函数声明的定义方式进行说明。

    函数声明有一个很重要的特征,那就是函数声明提升、函数内的变量声明提前。

    var scope = 'global';
    origin();
    function origin(){
        console.log(scope);
        var scope = 'local';
        console.log(scope);
    }

    函数声明提升指的是在执行代码前,会先读取函数声明,所以把调用它的语句放在函数前面也依然可以得到执行。

    函数声明提前指的是在函数内,会将所有的变量声明提前到函数内的最上部,但只是此时的变量只是声明了,并未赋值。

    执行函数时,在origin函数内的第一个console.log会打印undefined,这是因为scope变量的声明提到了console.log前,但未赋值,所以显示undefined。只有真正执行到了变量所在行时,才会为其赋值,所以第二个console.log会打印出‘local’(声明了一个全局变量scope,在函数内部也声明了一个局部变量scope。在函数执行时,遇到两个同名的变量,局部变量就会覆盖全局变量)。

    (三)作用域链

    函数的作用域链有两种状态,一种是函数定义时,一种是调用函数时。

    表示变量的对象被称为变量对象。

    函数定义时,会创建一个包含全局变量对象(全局对象)的作用域链,这个作用域链被保存在函数的内部属性[[scope]]中。

    当函数被调用时,就会创建一个执行环境,将该函数内的arguments属性和参数放入活动对象内(局部对象),此时这个活动对象位于作用域链的第一个,再将包含该函数的外部函数的全局变量对象放在作用域链的第二个。所以这就是为什么在函数内部就可以访问到函数外部变量的原因,如下图。

  • 相关阅读:
    QuartzQuartz定时任务
    jdbc模糊查询、分页查询、联合查询
    PreparedStatement
    web服务器简述
    JDBC基本操作
    RMI
    Http编程
    2020毕业季业务开发宝典
    程序设计流程图
    系统概要框图
  • 原文地址:https://www.cnblogs.com/pine-cone/p/9020554.html
Copyright © 2020-2023  润新知