活动对象:简单说就是这个函数的参数和显示声明的变量或函数。

函数内接受的参数实际是创建了一个局部变量:【形参名】 = 【传进来的值】,js的函数传参只传值。

作用域链:执行流进入一个函数,会先创建出作用域链来,作用域链大概就是这样

  本函数的活动对象--->父函数的活动对象--->父函数的父函数的活动对象--->父函数的父函数的父函数的活动对象--->直到全局活动对象【全局没有参数】

按值传递:js中参数是按值传递的,对基本类型好理解,函数内不能修改函数外的变量;

var a = 10;
function fn(a){
a = 100;
} console.log(a); //undefined

对于引用类型就不好理解,如果传一个值为对象的变量给函数,函数内部还是可以修改这个对象的属性,但不能重赋值

  

var b = {
q:10
} function fn(b){
b.q = 20;
b = new Object();
b.q = 100;
} fn(b);
console.log(b.q);

理解:所谓传值就是说传【右值】,a = 10的右值就是10;

   对于对象,代码中new了一个对象,堆中就划分了一块区域属于这个对象,然后返回指针地址  --->  var a = new Object();  new Object()是告诉浏览器“我要一块地”,浏览器划     分好后把地址告诉a“这块地在0x12345678”,于是var a = 0x12345678,每次操作这个对象【例如:a.name = '蜜蜂老牛黄瓜'】就是顺着这个地址去到内存中操作( 便于理解 )的。

  然后如果把【a】传给【fn(a)】(强调:传参只传值,右值),就是传了0x12345678给函数,这应该就是《高程》上说的传值,这就解释上门的代码为什么可以 b.q = 20; 修改到外面的变量,因为它是顺着地址去到内存中操作的;而因为函数内部的形参是局部变量的左值,实参是右值,所以 b = new Object();  就是把右值改了,操作b就相当于操作这个右值,这个新的b会在函数执行完毕后立即销毁。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一切皆对象,对象是属性的集合,对象是由函数创建的,函数也是对象。

理解:只要是属性的集合就可以说它是对象,函数天生自带一个属性,这个属性的值是个对象( 另一个属性的集合 ),这个对象一开始只有一个属性,这个属性指向函数本身。

  所以 typeof  function的时候看的是这个函数的原型的属性的对象的第一个属性的值,函数本身,所以返回function;typeof 其他的对象可能,其他对象的原型里面有一些可以让typeof识别的,所以返回object。

最新文章

  1. NXP恩智浦P89V51RB2/RC2/RD2单片机解密芯片破解方法!
  2. Computer Vision: OpenCV, Feature Tracking, and Beyond--From <<Make Things See>> by Greg
  3. cocos2d-x quick 学习 一 环境
  4. foreach---集合已修改;可能无法执行枚举操作。
  5. 生成大小为100的数组,从1到100,随机插入,不连续,也不重复[C#]
  6. VB.Net 字符串加密类
  7. java IO复习(三)
  8. Candy 解答
  9. GDAL显示线性shp文件
  10. Linux系统学习笔记之 1 一个简单的shell程序
  11. 读取sd卡下图片,由图片路径转换为bitmap
  12. SpringMVC之Controller传递JSON数据到页面
  13. python之路: 基础篇
  14. Java 垃圾回收算法
  15. 盼盼Degenerate——清除浮动的方法
  16. 数位dp-Bomb
  17. iFace安全专家揭秘:存放在区块链钱包中的比特币,其实已经早就不属于你……
  18. MySQL5.7 的GTID复制
  19. L2-007. 家庭房产(并查集)*
  20. ros pluginlib 段错误

热门文章

  1. HDU 3247 Resource Archiver(AC自动机 + 状压DP + bfs预处理)题解
  2. 使用LCX进行内网端口转发
  3. ES6 Set All In One
  4. code screenshot beautify plugin & 代码截图美化插件
  5. website 性能检测 & 前端性能优化
  6. js & while & do while
  7. Linux安装与使用
  8. Java基础语法:final修饰符
  9. JDK的下载、安装与配置
  10. java内存区域的划分