zoukankan      html  css  js  c++  java
  • js的实参是按值传递还是按引用传递

    1.如果是基本类型,则是按值传递

    var str = 'one';
    function f(string) {
        string = 'two';
    }
    f(str);
    console.log(str); // 仍为one, 未受string = 'two'赋值所影响

    2.如果是引用类型,则是按共享传递 call by sharing,并不是按引用传递,也不是按值传递。叫按对象传递、按对象共享传递.最早由Barbara Liskov. 在1974年的GLU语言中提出。该求值策略被用于Python、Java、Ruby、JS等多种语言。

    var obj = {};
    function f(o) {
        o.name = 'li';
    }
    f(obj);
    console.log(obj.name); //li  被修改了

    var obj = {};
    function f(o) {
     //   o = 'li';

       o = [];
    }
    f(obj);
    console.log(obj); //{}  没有修改

    重点:调用函数传参时,函数接受对象实参引用的副本(既不是按值传递的对象副本,也不是按引用传递的隐式引用)。 它和按引用传递的不同在于:在共享传递中对函数形参的赋值,不会影响实参的值。如下面例子中,不可以通过修改形参o的值,来修改obj的值。也就是说不可以改变引用类型的指针,只可以改变这个对象的属性。

    通常基本类型是不可变的,例如:number  string  boolean等

    var str = "abc";

    str[0]  // a

    str[0] = 'b' 

    str     //abc

    注意:很多时候我们会str = "gg"  通常会误解这不是会变吗,但是变得是str这个变量,被重新赋值了,而不是 'abc' 变化了。

     3.python的传递

    >>> extra = {'city': 'Beijing', 'job': 'Engineer'}
    >>> person('Jack', 24, **extra)
    name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

    **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra








  • 相关阅读:
    冒泡法排序(整数)
    system函数的应用
    数数的位数(正整数)
    翻译Sencha Touch Architecture 第二章
    BeeFramework
    Creating a masterdetail application with tableview
    翻译Sencha Touch Mobile Javascript Framework 第八章 The Flickr Finder Application
    SDWebImage笔记
    Ubuntu aptget方式安装Subversion
    Python统计svn变更代码行数
  • 原文地址:https://www.cnblogs.com/jay--zhang/p/5991451.html
Copyright © 2011-2022 走看看