小白前端开发笔记-一文看JS懂参数传递(为什么说JS中所有参数传递都是值传递,不能通过引用传递参数)

参数传递

首先明确一点:ECMAScript中所有参数传递都是值,不可能通过引用传递参数(js红宝书p66)

基本函数的参数传递为值传递不用解释:
例:

var i = 20;
        function fn(a) {
            console.log(a);//20
            a++;
            console.log(a);//21
        }
        fn(i);
        console.log(i);

在JS中所有涉及函数的参数传递均是值传递,虽然会随着改变而改变但是仍为值传递****(复制地址的过程是值传递)**

如果是址传递 那么应该是复制参数地址的地址

类似引用的现象是因为对象是通过引用访问的

以上不易理解多啰嗦几句
例:**

 function fn(obj) {
            obj.name = 'sam';
        };
        var obj2 = new Object();
        fn(obj2);
        alert(obj2.name); // sam

以上为值传递和引用传递。

思考(有关变量的访问方式)

提示:
基本数据类型通过值访问
引用数据类型通过引用来访问

var a = [1,2,3];

var b = a;

a = [4,5,6];

alert(b); //[1,2,3]

好像数组是基本类型一样。。,但是:

var a = [1,2,3];

var b = a;

a.pop();

alert(b); //[1,2]

这是怎么回事?

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
因为:(知乎解释)

a = [4,5,6];//改变的是a引用本身,没有改变数组对象,a和b没有了关系。简单点:在堆中开辟了内存0xx2 存放[4,5,6],而后a的值变成了0xx2,而之前堆中0xx1依旧存储着[1,2,3],b的值是0xx1,所以b不收a的影响。
a.pop();//改变的是数组对象,a引用没有改变。
b = a;//该操作后,b直接指向数组对象,不是b指向a,a再指向数组。
//所以改变a引用并不会对b引用造成影响,改变数组对象可以。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在VS Code使用GDB进行调试时,可以通过在调试配置设置"args"字段来传递参数。具体操作步骤如下: 1. 打开VS Code,并打开需要进行调试的项目文件夹。 2. 在项目文件夹创建一个名为`.vscode`的文件夹(如果已存在则跳过此步骤)。 3. 在`.vscode`文件夹创建一个名为`launch.json`的文件,如果已存在则打开该文件。 4. 在`launch.json`文件,按照以下格式设置"args"字段的值: ```json "args": ["参数1", "参数2", ...] ``` 5. 将参数替换为您需要传递的实际参数值。 例如,如果您想要传递两个参数`arg1`和`arg2`,则可以将"args"字段的值设置为: ```json "args": ["arg1", "arg2"] ``` 这样,在调试时,GDB会将这些参数传递给您的程序。 引用给出了在调试过程使用GDB的`call`命令来调用程序可见的函数,并传递参数的示例。您可以根据需要使用该命令来调用特定的函数并传递参数。 请注意,在VS Code进行调试时,确保已正确配置调试环境并安装了必要的扩展和工具链,以便使用GDB进行调试。 : 通过编译方法生成带有调试信息的可执行文件。 : 使用GDB命令进行调试,通过设置调试配置的"args"字段来传递参数。 : 使用GDB的`call`命令来调用程序的函数并传递参数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [一文掌握vscode远程gdb调试](https://blog.csdn.net/zong596568821xp/article/details/124338072)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [VScode C++ 开发 (四):GDB调试器 (good!)](https://blog.csdn.net/weixin_38346042/article/details/122218166)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值