zoukankan      html  css  js  c++  java
  • JS函数参数的传递 Better



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

    也就是说,把函数外部的值复制给函数内部的参数(值从一个变量复制到另一个变量一样)。



    代码验证


    向参数传递基本类型

    function addTen(num) { 
        num += 10; 
    }
    var count = 20; 
    addTen(count); 
    alert(count); //20,没有变化; 如果是按引用传递的会变成 30
    

    向参数传递引用类型

    function setName(obj) { 
        obj.name = "Nicholas"; 
        obj = new Object(); // **重点:如果按引用传递,外部参数会被重新赋值。
        obj.name = "Greg"; 
    } 
    var person = new Object(); 
    setName(person); 
    alert(person.name); //"Nicholas" ; 如果是按引用传递的会变成 "Greg"
    

    代码解读:

    1. 外部变量person对象的地址值,复制给内部参数obj (值传递),而不是“直接引用该地址值”(引用传递)
    2. 修改 obj.name = "Nicholas" // 因为obj复制了person的地址,所以person.name变成了"Nicholas"
    3. obj = new Object(); // 内部参数 obj 重新赋值,指向新的对象。
    4. obj.name = "Greg"; // 因为内部参数 obj 不再指向person的地址,所以person.name任然为"Nicholas"


    总结

    简单地说(个人理解),

    按值传递参数就是,在函数内部,新建一个变量,复制传入的参数。

    按引用传递就是,函数内部的形参,直接引用这个实参。对形参的任何修改,就是直接在这个实参上的修改。



    参考

    《JavaScript高级程序设计》.第3版 4.1.3 传递参数

  • 相关阅读:
    异常类
    设计模式
    java的参数传递
    meta 标签中 http-equiv 的作用
    导入CSV格式文件方法
    第四次博客作业-结对项目
    第九次作业-接口及接口回调
    第八次作业-继承
    软件工程第三次作业——关于软件质量保障初探
    Java第七次作业
  • 原文地址:https://www.cnblogs.com/huangtq/p/15544599.html
Copyright © 2011-2022 走看看