• JavaScript笔记-4


    变量,作用域和内存问题

    变量

    检测变量种类使用typeof(),检测对象种类用instanceof()

    基本类型值

    基本类型包括Null,Undefined,Number,Boolean,String,保存在栈内存中/
    基本类型值是按值访问的,可以操作保存变量中实际的值

    动态属性

    不同于引用类型,不能给基本类型的值添加属性

    复制变量值

    复制变量值时,复制后的两个变量可以进行任何操作而不互相影响

    传递参数

    在ECMAScript中,所有的函数的参数都是按值传递的

    1
    2
    3
    4
    5
    6
    7
    8
    function (num){
    num += 10;
    return num;
    }
    var count = 20;
    var result = add(count);
    alert(count);
    alert(result);//30

    在函数内部为count增加了10,但是函数外部的count依然是20,并没有受到影响

    引用类型值

    引用类型包括Object,保存在堆内存中.
    引用类型值是按引用访问的,因为不能直接访问对象的内存空间

    当复制保存对象的某个变量时,操作的是对象的引用,但为对象添加属性时,则操作的是实际的对象

    动态属性

    能给基本类型的值添加属性

    复制变量值

    复制变量值时,复制后的两个变量将引用同一个对象,操作会互相影响

    传递参数

    在ECMAScript中,所有的函数的参数都是按值传递的

    1
    2
    3
    4
    5
    6
    7
    8
    function setName(obj){
    obj.name = "Nick";
    obj = new Object();
    obj.name = "Gnomeek";
    }
    var person = new Object();
    setName(person);
    alert(person.name);//"Nick"

    在函数内部为obj的属性重设置为”Gnomeek”,但没影响到外部输出的结果,依然是”Nick”

    执行环境及作用域

    执行环境

    1
    2
    3
    4
    5
    6
    大专栏  JavaScript笔记-4class="line">7
    8
    9
    10
    11
    12
    13
    14
    var color = "blue";
    function changeColor(){
    var anotherColor = "red";
    function swapColors(){
    var tempColor = anotherColor;
    anotherColor = color;
    color = tempColor;
    // 这里可以访问 color、anotherColor 和 tempColor
    }
    // 这里可以访问 color 和 anotherColor,但不能访问 tempColor
    swapColors();
    }
    // 这里只能访问 color
    changeColor();


    每一个环境都可以向上搜索作用链域,而永远不能向下搜索
    例如全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据;而局部环境不仅可以访问函数作用域中的变量,而且有权访问其父环境,乃至全局环境。

    没有块级作用域

    声明变量

    使用var声明变量时,会自动添加到最接近的环境中,如果没使用var来声明,则会自动添加到全局环境中。

    查询标识符

    整个搜索过程从作用域链的前端开始,向上逐级查询与给定名字匹配的标识符;查询到就立即停止,不会继续查询
    局部环境中的变量:

    1
    2
    3
    4
    5
    6
    var color = "blue";
    function getColor(){
    var color = "black";
    return color;
    }
    alert(getColor());//black

    全局环境中的变量:

    1
    2
    3
    4
    5
    var color = "blue";
    function getColor(){
    return color;
    }
    alert(getColor());//blue

    不存在的变量:

    1
    2
    3
    4
    function getColor(){
    return color;
    }
    alert(getColor());//不存在的变量

  • 相关阅读:
    20220330 08:00:01
    20220330 08:00:01
    20220328 08:00:01
    20220329 08:00:01
    【Tokio】TCP 服务器
    【Tokio】echo 服务器
    【Tokio】有界多对一通道
    【Tokio】一对多通道
    【Tokio】异步写入文件
    【Tokio】UDP 服务器
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12370606.html
Copyright © 2020-2023  润新知