• javascript的变量、作用域


    一、复制变量值

    JavaScript有两种类型值:基本类型值引用类型值。这两种类型值的复制结果是不一样的。

    基本类型值

    1 var num1 = 5;
    2 var num2 = num1;

     那么num2的值将被赋为5,而且即便是删除num1也不会对它造成影响。

    引用类型值

    1 var obj1 = new Object();
    2 obj1.age = 53 var obj2 = obj1;

     虽然obj2.age同样为5,但其实obj1和obj2是指向同一对象,如果更改obj1的值,那么obj2的值也会随之改变。

    二、参数传递

    JavaScript中的参数传递都是按值传递的,即:在传递的过程中,将函数外的值复制给参数。

    因此就会得出以下结果:

    基本类型值

    1 var num1 = 5;
    2 function setValue(obj){
    3     return obj += 10;
    4 }
    5 var num2 = setValue(num1);
    6 alert(num1);//5
    7 alert(num2);//15

     因为这是一个复制的过程,基本类型的复制不会对原值产生影响,所以在函数内对参数进行计算,并不会改变num1的值。

    引用类型值

    1 function setAge(obj){
    2       obj.age = 15;
    3 }
    4 var john = new Object();
    5 setAge(john );
    6 alert(john.age);//15

     同理,因为应用类型值的复制,如果在函数中对参数进行重新复制,那么对函数外的原值也会造成影响。

    三、作用域

    和java、c等一些语言不通,JavaScript是没有块级作用域的。所谓的块级作用域,就是用{}抱起来的执行环境。

    如:

    1 (function(){
    2     var i = 5;
    3     if(i == 5){
    4         var color = "blue";
    5     }
    6     alert(color);
    7 })();

     相似代码下,java中最终会报错,因为if条件执行完后,color已经被销毁。但是JavaScript能正常执行。

    没有块级作用域并不代表没有执行环境。

    如以下代码:

    1 (function(){
    2     var i = 5;
    3     if(i == 5){
    4        var color = "blue";
    5     }
    6 })();
    7 alert(color);

     因为color是在函数内声明的,函数结束后,函数的执行环境已经被销毁,color同样不存在,自然会报错。

  • 相关阅读:
    Java 中队列的使用
    C# 网络编程之豆瓣OAuth2.0认证具体解释和遇到的各种问题及解决
    Java虚拟机工作原理具体解释
    天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能
    U-BOOT 移植到友善之臂mini2440
    眼下最好的JSP分页技术
    StageFright框架流程解读
    Oracle Hints具体解释
    大学技术类书单
    工作日志2014-07-09
  • 原文地址:https://www.cnblogs.com/nonkicat/p/2502122.html
Copyright © 2020-2023  润新知