IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 函数值传递问题 -> 正文阅读

[JavaScript知识库]函数值传递问题

函数值传递

在《JavaScript高级程序设计》第三版中有这么一句话 :ECMAScript中所有函数的参数都是按值传递的

  • 在js中,函数传递参数都是按值传递的
  • 当在传递参数时,形参是一个局部变量,和实参互不影响。
  • 当参数是一个引用数据类型时,形参复制的是实参的一份引用,所以当其改变时会影响外部实参,但并不意味着,是按引用传递的

(1)例子1

当传入的参数是值类型的时候

var a = 3;
function fn(b){
    console.log(b); //3
    b=2;
    console.log(b);  //2
}
fn(a);
console.log(a);   //3

因为形参是一个局部变量,故它从新开辟了一块栈内存用于存放2这个值,所以和外面的a是互不影响的。

(2)例子2

当传入的参数是引用类型,但是在函数里被赋值为了基本数据类型的时候:

var a={};
function fn(b){
    console.log(b);  //{}
    b=2;
    console.log(b);  //2
}
fn(a);
console.log(a);  //{}

因为刚开始传入a的时候,这里b指向的是一个指向a的堆的内存地址。

而后又将b的值赋值为了2,这时b开辟了一块栈内存,指针指向了这个栈内存

所以和外面的a是互不影响的。

(3)例子3

当传入的是一个引用类型,在函数里对引用类型做一个修改时:

var a={};
function fn(b){
    console.log(b);  //{}
    b.name = '小花';
    console.log(b);  //{name:'小花'}
}
fn(a);
console.log(a);   //{name:'小花'}

这里b还是指向了a的堆的内存地址,所以这里修改b的属性相当于修改a的属性,故这里的a和b是会相互影响的。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-01 15:07:38  更:2022-06-01 15:11:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:50:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码