JavaScript高级程序设计 笔记【第四章】变量作用域与内存问题

第四章 JavaScript 的变量、作用域与内存 # 4. 小结 (1)JavaScript 变量可以保存两种类型的值:原始值和引用值; (2)原始值有6种:Undefined、Null、Boolean、Number、String 和 Symbol; (3)原始值大小固定,因此保存在**栈内存上**; (4)从一个变量到另一个变量复制原始值会创建该值的第二个副本; (5)引用值是对象,存储在**堆内存上**; (6)**包含引用值的变量实际上只包含指向相应对象的一个指针,而不是对象本身**; (7)**从一个变量到另一个变量复制引用值只会复制指针,因此结果 阅读详情

4.1.1动态的属性

person此时是一个引用,他指向了new出的这块东西。

var person = new Object();
person.name = "hello";
alert(person.name);       //hello

 

4.1.2复制变量值

一个变量复制另一个变量的时候,是把值复制粘贴。

var num1 = 5;
var num2 = num1;

复制引用类型也是如此,而且他们都指向一个东西。也都可以修改这个东西。

var obj1 = new Object();
var obj2 = obj1;  //复制了引用
        
obj1.name = "hello";
alert(obj2.name);      //输出"hello"

 

4.1.4传递参数

函数的参数是按照复制传递的,就像上边的4.1.2一样。

此处向函数传递了引用,函数内复制的引用一样指向了new出的内存,所以输出hello

function setName(obj){
  obj.name = "hello";
}

  var person = new Object();
  setName(person);
  alert(person.name);    //hello

 

一个有趣的例子,在setName函数内首先把复制的obj引用创建一个对象"name",赋值为"hello"。

然后又把这个引用指向了一个新的new,创建一个对象name。赋值"HI"。

注意!!此时person没有被指向新的new,因为函数里的obj只是复制出来的。

在退出setName函数之后 这块new出的东西也被回收了。

所以输出hello。

function setName(obj){
  obj.name = "hello";
  obj = new Object();
  obj.name = "HI";
}

var person = new Object();
setName(person);
alert(person.name);    //hello

 

4.2.2没有块级作用域

if(true){
  var sum = 1;
}
  alert(sum);   //输出:"1"

 

作用域链目前感觉和c++差不多,需要再补充吧

 

 

5分钟搞定:用Pyannote和Whisper实现带说话人分离的语音转文字(附完整代码) 本文详细介绍了如何快速构建一个集成了说话人分离功能的语音转文字系统。通过结合OpenAI的Whisper模型进行高精度语音识别和Pyannote模型实现说话人分离,并提供了完整的代码实现、环境搭建指南以及核心的对齐与合并逻辑,帮助开发者高效处理会议录音、访谈等多说话人音频,实现自动化转录。 阅读详情

相关推荐

京东商品多维特征提取:基于时空大模型的实时库存预测接口设计

在电商行业,库存管理是供应链的核心环节之一。库存水平过高会导致资金占用、仓储成本增加,而库存水平过低则可能引发缺货风险,影响客户满意度和平台声誉。京东作为中国领先的电商平台,拥有海量的商品数据和复杂的业务场景,传统的库存预测方法难以应对市场动态变化和业务需求。时空大模型作为一种融合时间序列分析和空间特征提取的前沿技术,能够捕捉商品多维特征在时空维度上的变化规律,为实时库存预测提供更精准的决策依据。

FB13713612741的博客 954

JS函数闭包与对象作用域

function setName(obj){ obj.name = "xiaobai"; obj = new Object(); obj.name = "xiaohei"; } var obj = new Object(); setName(obj); console.log("obj",obj.name); 输出xiaobai 说明:在函数内

一生为追梦的博客 446

pyinstaller+scrapy打包出现错误:OSError: could not get source code

错误如下: Traceback (most recent call last): File "scrapy\utils\defer.py", line 55, in mustbe_deferred File "scrapy\core\spidermw.py", line 60, in process_spider_input File "scrapy\core\scraper.py", line 152, in call_spider File "scrapy\utils\misc.py

kin的博客 1760

JS和DOM操作面试笔试题,一不小心就被套路了—Node的三大属性

WEB前端考试题考试时间:1小时30分钟 每题3分,共40题,共计120分JavaScript部分 1. var arr1 = [10, 20]; arr1.push(30,40); arr1.pop(); arr1.push([50,60]); arr1.pop(); console.log(arr1.toString( A )); A.10

zhangli2513的博客 5230

鲁棒优化 (Robust Optimization) 算法详解及案例分析

鲁棒优化是一种用于处理不确定性优化问题的方法。其目标是在不确定性参数的可能取值范围内,找到一个对不确定性具有鲁棒性的解。

闲人编程的博客 4331

【论文复现】——基于改进FPFH特征提取的点云模板匹配方法

基于改进FPFH特征提取的点云模板匹配方法 [J]. 应用激光, 2024, 44 (04): 196-204.

点云侠的博客 612

js传递参数问题

在js中传递参数都是按值传递的。 例一: function addTen(num){ num+=10; return num; } var count=20; var result=addTen(count); alert(count); //20 没有变化 alert(result); //30 对于基本数据类型count 将值复制给参数num。以便在函数内部使用,

经贸小强的专栏 1059

【WRF-Chem Emissions教程第一期】WRF-Chem 排放概述

WRF-Chem 排放概述

WW、forever的博客 852

JavaScript学习记录二

title: JavaScript学习记录二 toc: true date: 2018-09-13 10:14:53 ——《JavaScript高级程序设计(第2版)》学习笔记 要多查阅MDN Web 文档 变量、作用域和内存问题 基本类型和引用类型的值 ECMAScript变量可能包含两种不同数据类型的值: 基本类型值:保存在栈内存中的简单数据段,这种值完全保存在内存中的一个位置 引用...

weixin_30449453的博客 5959

isaaclab无法识别NVIDIA显卡,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!    📌 特别说明: 文中部分技术问题来源于真实生产环境及网络公开案例,均经过精挑细选与系统化整理,并结合多位一线资深架构师和工程师多年实战经验沉淀,提

**My Coding Family** 1147

英伟达 DGX Spark & Reachy Mini 入门教程(一)

英伟达在2026年CES上发布多款开放模型,包括Nemotron推理LLM、Isaac GR00T VLA和Cosmos世界模型,助力开发者构建个性化AI代理。文章详细介绍了如何通过DGXSpark和Reachy Mini机器人打造办公助手,涵盖材料准备(推理/视觉模型、文本转语音服务)、智能体构建(NeMo Agent Toolkit框架)、工具调用和路由策略实现。系统支持本地/云端部署,提供语音交互、视觉识别和动作执行功能,并保持完全开源可定制。最后给出运行演示的终端配置步骤和测试用例,鼓励开发者在此基

2506_90492529的博客 2714

《JavaScript高级程序设计》对传参方式的理解

ECMAScript中所有函数的参数都是按值传递。 向参数传递基本类型的值,值会被复制。 例子: function addTen(num) { num += 10; return num; } var count = 20; var result = addTen(count); alert(count); //20,没有变化 alert(result); //30 解释:count是...

rrrrrio的博客 285

【麒麟桌面系统】企业微信提示当前副设备的企业微信版本较低

银河麒麟系统中登录企业微信时出现"副设备版本较低"的报错,可通过两种方案解决:1)更新最新版企业微信,需替换软件源并刷新软件商店安装8.0-50-4.1.26.6019kylin5版本;2)安装内测5.0版本企业微信,需下载deb包后使用sudo dpkg命令安装。文章还提供了常见问题解决表和长期维护建议,包括系统更新检查、软件源验证等维护项目及具体操作指南。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 2276

javascript高级程序设计第四章变量、作用域和内存问题笔记

4.1.3 传递参数 ECMAScript所有函数的参数都是按值传递的,不是按引用传递的 function setName(obj){ obj.name = "yuan"; obj = new Object(); obj.name = "fa"; } var person = new Object(); setName(person); console.log(perso...

qq_41706280的博客 192

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

qemu-aarch64-static:在x86上运行ARM64程序,解决交叉编译验证难题

嵌入式开发中,交叉编译出的ARM64程序往往依赖真实硬件才能运行验证,导致开发效率低下。用户态模拟技术提供了一种轻量级解决方案,它不模拟完整硬件,而是将ARM64 Linux用户程序的指令翻译为宿主机可执行的指令,从而在x86主机上直接运行目标架构的二进制文件。配合Linux内核的binfmt_misc机制,系统可自动识别并调用模拟器,进一步简化了执行流程。该工具在构建ARM64根文件系统、运行CI跨架构测试、调试动态链接程序等场景中表现突出,有效缩短了迭代周期。文章围绕qemu-aarch64-stati

weixin_34081595的博客 235

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

javascript高级程序设计学习笔记——第四章 变量、作用域和内存问题

javascript变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已。由于不存在定义某个变量必须要保存何种数据类型值的规定,变量的值及其数据类型可以在脚本的生命周期内随意变换。 一、基本类型和引用类型的值 ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是那些简单的数据段(Undefined、Number、Boolean

有梦想的猿哥哥博客 563

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JS高级程序设计读书笔记(第四章 变量作用域和内存问题)

第四章 复制变量值 如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。此后,这两个变量可以参与任何操作而不会相互影响。 ...

xiaowei_innocence的博客 215

变量、作用域、内存问题(第四章)-《JavaScript高级程序设计》阅读笔记

非抄书式笔记,仅记录些明晰基础概念和逻辑的知识点,与原书框架和作者书中已标识的重点内容结合查看

weixin_43664464的博客 218

《JavaScript高级程序设计》学习笔记(2)——第四章 变量、作用域和内存问题

基本类型和引用类型的值基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。局部对象会在函数执行完毕后立即被销毁。 检测类型:instanceof操作符result = variable instanceof constructor如果变量是给定引用类型(根据它的原型链来识别)的实例,那么instanceof 操作符就会返回 true。 执行环境及作用域 全局执行环境是最外围的一...

weixin_38385524的博客 303

javascript高级程序设计第四章:变量、作用域和内存问题读书笔记

1:基本类型值是保存在栈内存中的简单数据段,完全保存在内存中的一个位置。引用类型值是保存在堆内存中的对象,由于这种值大小不固定,因此不能保存在栈内存中。引用类型的值的变量保存的是一个指针,保存着一块内存的地址。 2:复制基本类型的值,会在栈中创建一个新值,此后两者不会相互影响。复制引用类型的值,会在栈中复制一个指针,两个指针指向堆中的同一个对象,改变其中一个变量,就会影响到另一个变量。...

weixin_30586257的博客 79

Javascript高级程序设计第二版第四章--变量,作用域及内存问题--笔记

由于JavaScript 变量松散类型的本质,决定了它是在特定时间用于保存特定值的一个名字而已,变量的值及其数据类型可以在脚本的生命周期内改变。这可能既有趣又强大,同时又容易出问题。 4.1 语法 ECMAScript 变量包括两种类型: a)         基本类型值 保存在栈内存中的简单数据段。 Undefined, Null,Boolean,Number和String,在内

shengxiaokui的专栏 360

JavaScript高级程序设计学习笔记第四章--变量、作用域和内存问题

1、变量可能包含两种不同数据类型的值:基本类型值和引用类型值。 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。 2、变量复制 如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上,两个变量可以参与任何操作而不会相互影响。 当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份放到...

weixin_30724853的博客 99

读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题

5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中 执行环境的销毁 某个执行环境中的所有代码执行完毕后 该环境被销毁 保存在其中的所有变量了函数定义也会随之销毁 作用域链...

weixin_30663391的博客 96

【JS】JavaScript高级程序设计-第四章 变量、作用于和内存问题

1.基本类型值存储在栈内存中,占据固定大小;引用类型存储在堆内存中,栈中保存的是对象的引用2.引用类型使用instanceof判断,typeof用来判断基本类型3.var 函数作用域;let块级作用域4.函数的局部环境可以通过作用域链访问父环境、全局环境;全局环境不能直接访问局部环境中的数据;5.js是具有自动垃圾收集机制的编程语言。

sobergyn的博客 1032
上一篇: 微信小程序中引入 iconfont 阿里矢量图库
下一篇: JavaScript高级程序设计 笔记【第五章】引用类型
崔佳宇_
崔佳宇_ 优质创作者: 嵌入式与硬件开发技术领域 优质创作者: 嵌入式与硬件开发技术领域
博客等级 码龄10年 1万+粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值