博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
局部变量和参数传递的问题
阅读量:5856 次
发布时间:2019-06-19

本文共 624 字,大约阅读时间需要 2 分钟。

<SCRIPT LANGUAGE=
"JavaScript"
>
var bb = 
1
;
function aa(bb) { //这里传递参数相当于 var bb = bb ;给形参bb赋值为1。(又参数传递,相当于就是在函数中定义了一个局部变量并且给这个变量赋了初值1)此bb非彼bb,是分别在两个不同的内存区间的变量,全局变量bb在堆中,局部形参bb在栈中。
    
bb = 
2
;  
    
alert(bb);
};
aa(bb);//2
alert(bb);//1
</SCRIPT>

 

函数体内,bb并没有使用var来定义,按理说这个bb在预处理的时候应该是window的属性。但在这里,函数声明的时候,带了一个参数bb,也就是相当于在函数体内声明了var bb。所以,函数里的bb就是函数活动对象的属性。所以函数执行时会输出2。函数执行完后,函数的活动对象被销毁,也就是局部的这个bb被删除了,执行流进入到window,再输出bb,值就是1了。

如果声明函数时,把参数那里的bb去掉,这段代码执行起来,结果就是弹出 2 2

记住一句话就好了:
“ECMA中所有函数的参数都是按值传递的”
值传递:把把一个值类型(也叫基本类型)传递给另一个变量时,其实是分配了一块新的存储空间,因此就本题来说,在内部改变这个值时,其实在函数外部对这个值没有影响。

转载于:https://www.cnblogs.com/aixiuxiu/p/6516961.html

你可能感兴趣的文章
python 3.6 setup
查看>>
第9章 泛型
查看>>
Selenium Web 自动化 - Selenium常用API
查看>>
chrome-解决该扩展程序未列在 Chrome 网上应用店中
查看>>
ASP.NET Session原理及处理方法
查看>>
oracle中order by造成分页错误
查看>>
XML序列化与反序列化(续)
查看>>
实现简单的时间显示
查看>>
进程体系结构
查看>>
移动端开发适配的2中方案
查看>>
Oracle 千万级别数据查询优化
查看>>
Orchard是如何工作的?
查看>>
走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串
查看>>
ClistCtrl
查看>>
bzoj 3992 [SDOI2015]序列统计——NTT(循环卷积&&快速幂)
查看>>
POJ1006——中国剩余定理
查看>>
【MAC】虚拟机Mac固定分辨率
查看>>
ListActivity的使用
查看>>
VI 你不知道的事
查看>>
文件与键盘输入与输出
查看>>