js_笔记_8月7日记录_活动对象_作用域链_按值传递
活动对象:简单说就是这个函数的参数和显示声明的变量或函数。
函数内接受的参数实际是创建了一个局部变量:【形参名】 = 【传进来的值】,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。
js_笔记_8月7日记录_活动对象_作用域链_按值传递的更多相关文章
- linux 进阶命令笔记(12月26日)
1. df 指令 作用:查看磁盘空间 用法: #df -h -h 表示以可读性较高的形式展示大小 2.free 指令 作用:查看内存使用情况 语法:#free -m -m表 ...
- 4月11日 python学习总结 对象与类
1.类的定义 #类的定义 class 类名: 属性='xxx' def __init__(self): self.name='enon' self.age=18 def other_func: pas ...
- 《高级软件测试》web测试实践--12月31日记录
今日的任务进度如上图所示.我们对华科软件学院和计算机学院的网站进行了对比分析,分析的角度包括基本功能分析.前端性能分析.用户调研等.在这里我们简单总结下我们得到的评测结果. 基本功能分析:计算机学院和 ...
- 《高级软件测试》web测试实践--12月30日记录
考完数学,我们正式开始web测试实践的作业,今天,我们主要进行了方案的选择和人员的分工.任务计划和安排如上图所示. 任务进展:完成题目选择和人员分工: 遇到问题:暂无: 下一步任务:完成软件评测.用户 ...
- 11月28日 记录一个错误❌,看ruby on rails --active support core extensions--present? && presence && duplicable?
❌错误 1. @job.resume.count: 提示❌ undefined method `resume' ✅: @job.resumes.count //解释:调出某一个job的所有简历, ...
- 西安OpenParty11月29日活动高清图文回顾——新增西安APEC蓝美图!
本次活动由西安OpenParty负责线下活动组织运营,线上由InfoQ-QClub.OSChina协办. OSChina活动召集帖:运维为王——应用系统.DevOps与Docker(11月29日) I ...
- 2013年9月29日 iOS 周报
新闻 Apple Tech Talks 2013 在中国上海的iOS Tech Talks活动将于11月12日展开,活动主要针对iOS 7.活动分为App开放日和游戏开放日,主要内容可查看链接.当你看 ...
- JavaScript学习笔记——JS中的变量复制、参数传递和作用域链
今天在看书的过程中,又发现了自己目前对Javascript存在的一个知识模糊点:JS的作用域链,所以就通过查资料看书对作用域链相关的内容进行了学习.今天学习笔记主要有这样几个关键字:变量.参数传递.执 ...
- 2016年2月16日开始,每天一篇,记录学习心得,【基本技能篇】>>开篇《如何阅读一本书——心得》
如何阅读一本书——心得 ——2016年2月12日 要达到阅读的所有目的,就必须在阅读不同书籍的时候,运用适当的不同速度.读的太快或太慢,都一无所获. 四个阅读层次:①基础阅读,具有基本阅读的能力,包括 ...
随机推荐
- Flutter: SearchDelegate 委托showSearch定义搜索页面的内容
API class _MyHomeState extends State<MyHome> { List<String> _list = List.generate(100, ( ...
- Flutter 创建dashboard页面
1 import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends Sta ...
- NGK是如何运用IPFS分布式存储的?
整个夏季,除了天气的火热,还有的火热莫过于IPFS挖矿这个领域了.IPFS的概念火热到,你可以看到到处都在卖IPFS矿机.那么,是什么原因导致IPFS这么火呢?在这之前,我们先了解一下什么是IPFS技 ...
- redis缓存穿透穿透解决方案-布隆过滤器
redis缓存穿透穿透解决方案-布隆过滤器 我们先来看一段代码 cache_key = "id:1" cache_value = GetValueFromRedis(cache_k ...
- Java基本概念:封装
一.简介 描述: 生活中,我们要看电视,只需要按一下开关和换台就可以了.我们没有有必要了解电视机内部的结构. 制造厂家为了方便我们使用电视,把复杂的内部细节全部封装起来,只给我们暴露简单的接口,比如电 ...
- Flannel和Calico网络插件工作流程对比
Flannel和Calico网络插件对比 Calico简介 Calico是一个纯三层的网络插件,calico的bgp模式类似于flannel的host-gw Calico方便集成 OpenStac ...
- 用量子计算模拟器ProjectQ生成随机数,并用pytest进行单元测试与覆盖率测试
技术背景 本文中主要包含有三个领域的知识点:随机数的应用.量子计算模拟产生随机数与基于pytest框架的单元测试与覆盖率测试,这里先简单分别介绍一下背景知识. 随机数的应用 在上一篇介绍量子态模拟采样 ...
- 【图像处理】使用OpenCV进行图像处理教程(一)
OpenCV是进行图像处理的工具,也是计算机视觉领域近十几年不断发展和完善的产物.面对这个已基本成熟的开源库知识体系,我们新生代有必要不断地总结.回顾,以新的视角快速融入计算机视觉的奥秘世界. 从这篇 ...
- 关于C++中构造函数的常见疑问
基本概念 我们已经知道在定义一个对象时,该对象会根据你传入的参数来调用类中对应的构造函数.同时,在释放这个对象时,会调用类中的析构函数.其中,构造函数有三种,分别是默认构造函数,有参构造函数和拷贝构造 ...
- 通过 .NET NativeAOT 实现用户体验升级
前言 TypedocConverter 是我先前因帮助维护 monaco-editor-uwp 但苦于 monaco editor 的 API 实在太多,手写 C# 的类型绑定十分不划算而发起的一个项 ...