zoukankan      html  css  js  c++  java
  • 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同样不存在,自然会报错。

  • 相关阅读:
    Oracle 组件 系列 小结
    Oracle Data Mining 组件 说明
    GIS空间索引(有了思路代码还不是手到擒来)
    完成端口与高性能服务器程序开发(转)
    const? const ! 全解
    服务器架构
    SDL 源码分析(2)
    数据结构个算法学习笔记(2)
    高性能服务器架构 的几个注意点 (HighPerformance Server Architecture)
    GIS底层开发总结
  • 原文地址:https://www.cnblogs.com/nonkicat/p/2502122.html
Copyright © 2011-2022 走看看