前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Js 参数传递

Js 参数传递

作者头像
hss
发布于 2022-02-25 11:11:41
发布于 2022-02-25 11:11:41
11.1K00
代码可运行
举报
文章被收录于专栏:前端卡卡西前端卡卡西
运行总次数:0
代码可运行

Js函数里面的参数

在看 Js参数传递时,先看最基本的,会为下面做铺垫

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function fn() {
    var a = 100
    console.log(a); //100
}
fn()
console.log(a); // 报错a is not defined
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function fn() {
    a = 100 //这里不是var a = 100,而且,也没有定义局部变量var a,因此这里约等于window.a = 100
    console.log(a); //100
}
fn()
console.log(a); //100
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function fn(a) {
    console.log(a); //100
    a = 100 //由于这里有形参a,因此,这里的a = 100,约等于 var a = 100
    console.log(a); //100
}
fn(100)
console.log(a); //报错a is not defined

上述代码完全等价于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function fn(a) {
    var a
    console.log(a); //100
    a = 100
    console.log(a); //100
}
fn(100)
console.log(a); //报错a is not defined

Js参数传递

在这里,直接通过具体案例一个个循环渐进的说明 js的参数传递

普通类型参数传递

首先就是最简单的普通类型(string,number,boolean,null,undefined,symbol)赋值

案例1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = 1
a = 2

console.log(a); //2

案例2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = 1
var b = a
b = 2
console.log(a); //1
console.log(b); //2

案例3:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = 1
function fn(a) {
    console.log(a); //这里的a是第一次接收到的形参a,即1
    a = 100 //这里由于已经定义了形参a,因此约等于 var a = 100
    b = a   //这里由于没有定义过形参b,因此这里约等于window.b = a
    console.log(a); //这里的a是var a = 100后的a,即100
    console.log(b); //这里的b是window.b = 100,即100
}
fn(a)
console.log(a); //1
console.log(b); //100

案例4(完全等价于案例3):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = 1
function fn(aa) {
    console.log(aa); //这里的aa是第一次接收到的形参a,即1
    aa = 100 //这里由于已经定义了形参aa,因此约等于 var aa = 100
    b = aa   //这里由于没有定义过形参b,因此这里约等于window.b = aa
    console.log(aa); //这里的aa是var aa = 100后的a,即100
    console.log(b); //这里的b是window.b = 100,即100
}
fn(a)
console.log(a); //1
console.log(b); //100
console.log(aa);    //报错报错aa is not defined

案例5(完全等价于案例4):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = 1
function fn(aa) {
    var aa
    console.log(aa); //这里的aa是第一次接收到的形参a,即1
    aa = 100 //这里由于已经定义了形参aa,因此约等于 var aa = 100
    b = aa   //这里由于没有定义过形参b,因此这里约等于window.b = aa
    console.log(aa); //这里的aa是var aa = 100后的a,即100
    console.log(b); //这里的b是window.b = 100,即100
}
fn(a)
console.log(a); //1
console.log(b); //100
console.log(aa);    //报错报错aa is not defined

案例3,4,5重点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 重点:fn函数里面的aa = 100,根据案例2可粗略转化为:
 * var a = 1
 * var aa = a
 * aa = 100
 * console.log(a)   //1
 * console.log(aa)  //100
 * 因此,fn函数里面的aa = 100,并不会修改fn函数外面的a !
 * 并且:aa是fn的局部变量,所以aa = 100,会将fn函数里面的aa修改成100!
*/

引用数据类型参数传递

案例1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = { age: 1 }
a = { age: 100 }
console.log(a); //{age:100}

案例2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = { age: 1 }
var b = a
b = { age: 100 }
console.log(a); //{age:1}
console.log(b); //{age:100}

案例3:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = { age: 1 }
function fn(a) {
    console.log(a); //{age:1}
    a = { age: 100 }    //这里由于已经定义了形参a,因此a = {age:100}约等于var a = {age:100}
    console.log(a); //{age:100}
}

fn(a)
console.log(a); //{age:1}

案例3完全等价于下述代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = { age: 1 }
function fn(aa) {
    var aa
    console.log(aa); //{age:1}
    aa = { age: 100 }    //这里由于已经定义了形参aa,因此aa = {age:100}约等于var aa = {age:100}
    console.log(aa); //{age:100}
}

fn(a)
console.log(a); //{age:1}

/**
 * 重点:执行fn(a),将a当做形参传给fn函数里的aa,
 * 首先在fn函数内部定义fn的局部变量var aa,然后将fn(a)的a给aa,即:
 * var a = {age:1}
 * var aa = a
 * aa = {age:100}
 * 根据案例2可知:此时的a:{age:1},aa:{age:100}
*/
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前端学习(35)~js学习(十二):预编译
规律1:任何变量,如果未经声明就赋值,此变量是属于 window 的属性,而且不会做变量提升。(注意,无论在哪个作用域内赋值)
Vincent-yuan
2020/03/18
4800
JavaScript参数传递,参数默认值,参数的收集与展开
这个例子中,a 和 b 属于函数中的局部变量,只能在函数中访问。调用函数时,传递的数据会根据位置来匹配对应,分别赋值给 a 和 b。
小颜同学
2023/08/23
1K0
前端学习(34)~js学习(十一):作用域和变量提升
作用域:通俗来讲,作用域是一个变量或函数的作用范围。作用域在函数定义时,就已经确定了。
Vincent-yuan
2020/03/18
7970
JS中函数的本质,定义、调用,以及函数的参数和返回值
匿名函数也是函数,当它自执行的时候,会创建自己的函数内部作用域,在执行完毕之后会被销毁,因此在外部无法访问到自执行的匿名函数内部
用户1289394
2021/10/13
18.4K0
JS中函数的本质,定义、调用,以及函数的参数和返回值
JS学习系列 06 - 变量对象
上一节我们讨论了执行上下文,那么在上下文中到底有什么内容,为什么它会和作用域链扯上关系,JS 解释器又是怎么找到我们声明的函数和变量,看完这一节,相信大家就不会再迷惑了。
leocoder
2024/02/01
1910
JS学习系列 06 - 变量对象
Js预编译
预编译前奏 1,任何变量未经声明就赋值,此变量就为全局对象所有 a = 123 console.log(a); // 123 var a = b = 123 console.log(a, b); // 123 123 function test() { var a = b = 123 } test() console.log(b) // 123 2,一切声明的全局变量,全是window的属性 <script> // a = 123 // console.log(a); // 123 // v
hss
2022/02/25
8380
笔记:js参数传递问题
解释:b对c说,我同意你跟我共用一个内存地址,你可以在我的内存地址内,修改局部成员,但是你要连我的家都给挪走,对不起 你自己走。。。
yuezhongbao
2019/02/26
5.3K0
JavaScript的预编译过程
在全局环境中会生成一个 GO对象 (Global Object),还是按照上面的四步执行。
FinGet
2019/06/28
4180
JavaScript的预编译过程
前端day19-JS高级(函数调用的上下文模式)学习笔记
1.1复习函数三种调用方式:普通函数 对象方法 构造函数(理解this关键字作用:谁调用这个函数,this指向谁)
帅的一麻皮
2020/05/10
1.3K0
JS学习系列 06 - 变量对象
上一节我们讨论了执行上下文,那么在上下文中到底有什么内容,为什么它会和作用域链扯上关系,JS 解释器又是怎么找到我们声明的函数和变量,看完这一节,相信大家就不会再迷惑了。
leocoder
2018/10/31
1.4K0
前端基础-JavaScript函数进阶
这种写法将一个匿名函数赋值给变量。这时,这个匿名函数又称函数表达式(Function Expression)
cwl_java
2020/03/26
5700
23·灵魂前端工程师养成-JavaScript函数
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/10/31
3840
23·灵魂前端工程师养成-JavaScript函数
你不得不知的ES6的变量声明!
在ES5中,变量声明只有var和function以及隐式声明三种,在ES6中则增加了let,const,import和class四种,以下来介绍着七种变量的声明。
胡哥有话说
2019/07/25
4800
前端架构师进阶之路07_JavaScript函数
相当于将一条或多条语句组成的代码块包裹起来,在使用时只需关心参数和返回值,就能完成特定的功能,而不用了解具体的实现。
张哥编程
2024/12/13
1750
前端架构师进阶之路07_JavaScript函数
JavaScript 严格模式
严格模式是 ECMAScript5 (ES5)发布的语言新特性。使用严格模式可以限制 JavaScript 的一些语言特性,使用严格模式可以去除在书写代码时的一些“骚操作”(有些特性在严格模式下是不可用的),使代码更严谨整洁。
多云转晴
2020/02/17
1.1K0
JavaScript高级语法补充(函数参数传递、in delete关键字、比较运算符隐式转换)
1.值类型 (5种):  栈中存储的是数据,赋值时拷贝的也是数据。修改拷贝后的数据对原数据没有影响。
帅的一麻皮
2020/05/18
7290
JavaScript-ECMAScript5-JS基础语法「建议收藏」
更多参看MDN: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/JavaScript_technologies_overview
全栈程序员站长
2022/09/22
1.4K0
JavaScript-ECMAScript5-JS基础语法「建议收藏」
深入理解JavaScript函数参数|技术创作特训营第一期
这个例子中,a 和 b 属于函数中的局部变量,只能在函数中访问。调用函数时,传递的数据会根据位置来匹配对应,分别赋值给 a 和 b。
小颜同学
2023/08/16
7490
JavaScript基础
「计算机语言」分为机器语言,汇编语言,高级语言。计算机内部最终执行的都是机器语言,由0和1这样的二进制数构成。
小城故事
2023/03/10
1.1K0
JavaScript基础
理解es6中的暂时性死区
JS中没有明确的全局作用域的概念,只有局部作用域以及全局执行环境的概念,全局执行环境被认为是window对象,是最外围的一个执行环境。因为作用域的概念只是给后续声明语句的阐述做一个铺垫,所以这里就不赘述了。
全栈程序员站长
2022/09/07
8610
相关推荐
前端学习(35)~js学习(十二):预编译
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档