读书笔记《你不知道的JavaScript上卷》1.4提升

SCI论文Discussion写作:如何用AI工具三步打造审稿人认可的深度逻辑框架 本文针对SCI论文Discussion写作的痛点,提出利用AI工具三步构建深度逻辑框架的方法。首先,使用Claude等工具搭建个性化提纲,解决“浅显病”与“混乱症”;其次,高效整合文献与结果,填充证据;最后,优化逻辑衔接与学术语言,打造审稿人认可的流畅论证。该方法强调研究者主导,AI辅助,显著提升写作效率与深度。 阅读详情

4.1 首先看现象

代码1:

a = 2;
var a;
console.log( a );//打印2

代码2:

console.log( a );//打印undefined
var a = 2;

上面这两个就是体现了JS中变量提升的简单示例,为什么是这样呢?

4.2 提升的本质

之前说过JS代码的执行会经过两个阶段,一个是编译阶段,一个是执行阶段。现有语句“var a = 2;“其实相当于“var a;”和“a = 2;”两条语句,其中第一个声明语句是在编译阶段进行的,第二个赋值语句是在执行阶段进行的,正因为这样所以声明语句的运行要先于赋值语句,所以就会有上面这种现象。

提升:由于声明所在的编译阶段要先于赋值所在的执行阶段,这个过程就好像变量和函数声明从它们在代码中出现的位置被“移动”到了最上面,这个过程就叫做提升。

这就好像4.1中的代码2可以看成如下代码(提升是由于上述2个阶段引起的,通常我们都会把变量的提升理解为代码写在作用域的第一行,这样有助于我们分析代码,并且结果跟正确的结果是一致的):

var a;//声明相当于出现在作用域的第一行

console.log( a );//执行的时候还没有执行到赋值语句所以打印undefined
a = 2;

这样一来一切就明朗了。

4.3 函数的提升

函数和变量一样也会提升,这里会牵扯到一个顺序的问题,看如下代码:

foo(); // 这里打印3
function foo() {//这个foo是函数的声明会被提升,相当于放在了作用域的起始位置
    console.log(1);
}
var foo = function() {//这个foo是变量(虽然赋值以后是函数),所以变量会被提升(但没有赋值),不过由于上面的foo已经提升了,也就是已经声明过了,这种情况这里的foo单纯的var声明将会被忽略。
    console.log(2);
};
function foo() {//这个foo也会被提升,并且会覆盖之前提升的foo,所以打印3
    console.log(3);
}

由上可知,对于同一个名称的提升,如果变量写在前面的话,那么函数的提升会覆盖变量的提升,如果函数写在前面的话,后面变量的提升(var声明这种情况)将会忽略,所以可以总结出函数的提升优先于变量的提升。

4.4 变量提升的坑

现在考虑一种比较特殊的提升,代码如下:

foo(); // TypeError
bar(); // ReferenceError
var foo = function bar() {
    console.log(123);
};

上述代码中foo是TypeError应该不会有什么疑问的,由于foo是var声明的所以会提升,当执行的时候foo还没有赋值所以是undefined,所以直接以函数的形式调用是不行的,所以TypeError。对于bar这种情况,由于bar被赋值给foo,这种具名函数将会在函数外面被忽略,所以相对于函数外部来说bar相当于不写,故调用bar,会出现ReferenceError,这里说明一点,即使bar在最后一行调用也是不行的,因为bar在函数外部是忽略的。上述代码可以看做如下代码:

var foo;//foo提升了

foo(); // TypeError
bar(); // ReferenceError

foo = function() {
    var bar = foo;//只有在函数内部才能访问到bar
    console.log(123);
};
大模型之Spring AI实战系列(二十一):Spring AI + MCP + 本地文件系统实战指南 在上一篇文章中,我们学习了如何使用 Spring AI 集成 Model Context Protocol (MCP),并通过 Brave Search 实现了互联网搜索能力的接入。本文将继续深入 Spring AI 的 MCP 实战能力,介绍如何将 **本地文件系统** 封装为 LLM 可调用的工具 阅读详情

相关推荐

Windows游戏多开检测实战:5种技术原理与破解方法详解(附C++代码)

本文深入解析了Windows游戏多开检测的5种核心技术原理,包括进程枚举、互斥体、信号量、窗口及文件映射检测,并详细探讨了对应的破解方法。通过分析这些基于进程和内核对象的攻防机制,为开发者与逆向爱好者提供了从底层理解Windows系统进程管理的实战视角,并附有核心C++代码示例。

weixin_29315091的博客 243

《你不知道的JavaScript(上卷)》笔记:提升

2 a = 2; var a; console.log(a); // 2 undefined console.log(2); // undefined var a = 2; 函数被提升 foo(); function foo() { console.log( a ); //undefined var a = 2; } 相当于: function foo() { ...

wuweitiandian的专栏 262

使用Eggjs做服务端获取微信小程序云开发数据库的access_token

最近自己想写了一个微信小程序,恰巧里面有个云开发,恰巧里面有个数据库,那懒人的我,就直接用云开发里面的数据库了,做测试或者正式也好,对于刚开始来说,免费的配额是够用的。 后来想到在小程序云开发上面的数据怎么看才方便?刚好微信小程序有一个服务端API,那就方便很多了,那就直接敲个服务端来获取云开发上数据库的数据出来到自己的后台上面,那以后管理起来也方便很多。 看了一下服务端api之后,发现有三个重要...

kalenE992的博客 1705

《你不知道的JavaScript上卷》知识点整理与读书笔记

第一部分 作用域和闭包 第1章 作用域是什么 1.1编译原理 1.2理解作用域 1.3作用域嵌套 1.5异常 第2章 词法作用域 第3章 函数作用域和块作用域 第5章 作用域和闭包 第二部分 this和对象原型 第1章 关于this 第2章 this全面解析 第3章 对象 第4章 混合对象“类” 第5章 原型 第6章 行为委托 之前被好友推荐过《你不知道的JavaScript》这一系列的书籍。上中下三本书都不算厚,内容也是比较独立。本来是打算一个月内看完这本上卷和下卷,可总是因为自己的.

qq_45549336的博客 6405

<蓝桥杯软件赛>零基础备赛20周--第16周--GCD和LCM

gcd,lcm

罗勇军的博客 7614

Zynq 【SDK裸机开发之PS】——DDR的内存分配使用详解

Zynq如果跑操作系统的话,内存管理的工作都会交给系统来操作,但是如果是裸机的话,则需要自己对DDR3的内存进行管理。

shizhibuyi1234的博客 7380

你不知道的JavaScript 上卷读书笔记

看了《你不知道的JavaScript 上》,为了防止自己忘记,特此记下与我而言的部分重点 任何足够先进的技术都和魔法无异。 ——Arthur C. Clarke 作用域和闭包 编译原理 分词/词法分析(Tokenizing/Lexing) 编程语言的所有字块与符号都会被分解为词法单元; var a = 2; //分解为var、a、=、2、;。 // ! 空格是否被当做词法单元,取决于空格在这门语言中是否具有意义 解析/语法分析(Parsing) 这个过程是将词法单元流转换成一个由元素逐.

weixin_42832836的博客 679

《你不知道的JavaScript上卷》知识点整理与读书笔记_百度你不知道的js书知识

/也就是这个对象本身,想一想为什么this是指向这个对象本身,我保证前面的this里面讲的知识,绝对可以分析出来这里的this指向哪里。foo.call(obj)//2 这里显示调用,foo中this是obj,所以回调中是obj的a。//这行代码只是为了验证()中的var i,以及{}中的a,最后在外部均可以访问到这两个标识符。foo()//3 这里光秃秃调用,foo中this是window,所以回调中是window的a。//当然把最后的()放进去的效果也是一样的,仅仅是书写风格不同。

m0_61067876的博客 1146

PGM-Explainer实验总结

PGM-Explainer建立了一个概率图模型,为GNN提供实例级解释。 论文标题:PGM-Explainer: Probabilistic Graphical Model Explanations for Graph Neural Networks 论文地址:2010.05788.pdf (arxiv.org) PGM-Explainer实验 实验目的 研究PGM-Explainer的有效性 实验方案 合成数据集的节点分类 与其他解释器做对比实验 使用六个合成数据集。 每个输入图都是一个

笔记|思路|总结 1万+

YOLOv11改进策略【卷积层】| arXiv 2025 YOLO-Master中的稀疏混合专家ES-MoE 动态路由提适配 + 稀疏激活降延迟,突破精度-效率权衡

ES-MoE(Efficient Sparse Mixture-of-Experts)是为解决传统YOLO类实时目标检测器的静态计算冗余问题而提出的稀疏混合专家模块。现有YOLO架构对所有输入场景采用统一的密集计算模式,导致简单场景资源浪费、复杂场景(如密集小目标、遮挡场景)计算不足,难以平衡检测精度与推理速度。ES-MoE引入实例条件自适应计算,通过动态路由机制为不同复杂度的输入分配差异化计算资源,突破传统静态架构的精度-效率权衡限制,同时适配实时检测的轻量化需求。

Limiiiing的博客 465

《你不知道的javascript(上卷)》——读书笔记

《你不知道的javascript(上卷)》 摘要:         我觉得这本数对javascript的一些难点有深层次的分析,遂打算近日拿来学习.          本书目录:                 第一部分: 作用域和闭包                第二部分: this和对象原型 第一部分: 作用域 概念:引

weixin_40821790的博客 1044

100天精通Python(数据分析篇)——第53天:初识pandas模块_基础介绍

一、初始pandas 1. 什么是pandas? 2. 为什么要学习pandas? 3. pandas的优势 4. 下载安装pandas 二、Pandas的数据类型 1. Series 2. DataFrame

努力让自己发光,对的人才能迎着光而来 17万+

你不知道的JS(上卷)——读书笔记4 提升

第四章 声明的变量和函数,在编译阶段前,会把声明提升到作用域最前面,例如: a = 2; var a; console.log(a); //2 根据提升规则,声明的a变量会提升到最前面,所以打印出的结果是2 上述代码可当做如下代码: var a; a = 2; console.log(a); 同样,有如下代码: console.log(a); //underfined a = 2; 等同于下面代码: var a; console.log(a); //underfined a = 2;

weixin_44710964的博客 204

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

你不知道的JavaScript(上卷)读书笔记

《你不知道的JavaScript(上卷)》读书笔记。

多啦的博客 865

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

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

js中的提升!绝对神总结——《你不知道的js 上卷》读书笔记(四)

看到这个题目我们可能会想到若干问题: 1.提升什么东西? 2.提升到哪里? 3.为什么要提升? 4.什么时候提升? 5.提升做什么用? 如果你也有这些疑问,就跟着我一起来学习这篇文章吧!不论你是连提升两个字都没听过的j小白,还是你已经略知一二,这篇文章都可以给你一定的收获! 什么是js的提升? 首先呢我们应该知道,js这门语言他虽然是解释型的语言,但是也是有编译过程的!如果你不知道js编译器做什么可以看看 之前的文章 ,在编译阶段,有一部分工作就是提升!提升可以理解成字面本意,就是把一部分代码从其出现的

qq_36049117的博客 524

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

读书笔记-你不知道的js(上卷)

作用域、闭包、对象、

junjiahuang的博客 276

【读书笔记】《你不知道的 JavaScript(上卷)》

第一部分 作用域和闭包 1.1 作用域是什么? 作用域是一套规则,用于确定在何处以及如何查找变量(标识符)。如果查找的目的是对变量进行赋值,那么就会使用 LHS 查询;如果目的是获取变量的值,就会使用 RHS 查询。赋值操作符会导致 LHS 查询。=操作符或调用函数时传入参数的操作都会导致关联作用域的赋值操作。 JavaScript 引擎首先会在代码执行前对其进行编译(词法分析->语法分析...

日常问题bug解决、学习分享、个人杂谈等等随便写写哈哈哈 167

你不知道的JavaScript(上卷)——读书笔记

1. 作用域 1.1 角色 引擎 从头到尾负责整个JavaScript程序的编译及执行过程。 编译器 引擎的好朋友之一,负责语法分析及代码生成等脏活累活。 作用域 作用域引擎的另一位好朋友,负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。 1.2 编译过程 RHS查询 (赋值操作的左侧) 简单地找到某个变量 LHS查询(赋值操作的右侧) 试图找到变量地容器本身,从而可以对其赋值 1.3 作用域嵌套 当

Floyd的博客 292

《你不知道的JavaScript》 读书笔记

本书属于基础类书籍,会有比较多的基础知识,所以这里仅记录平常不怎么容易注意到的知识点,不会全记,供大家和自己翻阅; 上中下三本的读书笔记: 《你不知道的JavaScript》 (上) 读书笔记 《你不知道的JavaScript》 (中) 读书笔记 《你不知道的JavaScript》 (下) 读书笔记 第一部分 作用域和闭包 第二章 词法作用域 词法查找 全局变量会自动成为全局对象(浏...

大灰狼的小绵羊哥哥的博客 694

《你不知道的JavaScript》 (上) 阅读摘要

本书属于基础类书籍,会有比较多的基础知识,所以这里仅记录平常不怎么容易注意到的知识点,不会全记,供大家和自己翻阅

前端下午茶 235

《你不知道的JavaScript》(上卷)读书笔记:this全面解析(1)

显式绑定 如果我们不想像隐式绑定一样,在一个对象内部包含一个函数引用,而是像在某个对象上强制调用函数,需要怎么做呢? js中“所有”函数都有一些有用的特性(这和它们的[[Prototype]])有关,可以被用于解决这个问题: 具体来说,可以使用函数的call和apply方法。 这两个方法的第一个参数是一个对象,是给this准备的,接着在调用函数时将其绑定到this。因为可以直接指定this...

qq_34241037的博客 209

你不知道的javascript 上卷(第一部分1-4章) 读书笔记

你不知道的javascript 上卷 读书笔记 第一部分 作用域和闭包 第一章 作用域是什么 引擎:从头到尾负责整个JavaScript程序的编译及执行过程 编译器:负责语法分析及代码生成等 作用域:负责收集并维护由所有声明的标识符组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。 LHS和RHS查询 LHS查询是为了找到变量容器的本身从而对其赋值; RHS查询时为了获取变量的值。 第二章 词法作用域 词法作用域就是定义在词法阶段的作用域,由写代码时将变量

weixin_42267121的博客 173

你不知道的js(上卷)-读书笔记

PART I this和对象原型 函数作用域和块作用域 区分函数声明和函数表达式 区分函数声明和表达式最简单的方法是看 function 关键字出现在声明中的位置(不仅仅是一行代码,而是整个声明中的位置)。 如果 function 是声明中的第一个词,那么就是一个函数声明,否则就是一个函数表达式。 如:function foo(){…} 和 ( function foo(){}); 函数声明和函数表达式之间最重要的区别是它们的名称标识符将会绑定在何处。 函数声明:名称标识符会被绑定在所在作用

weixin_44417826的博客 246

你不知道的JavaScript上卷读书笔记1

第一章 作用域是什么

Pentium的博客 337

《你不知道的JavaScript》--读书笔记

???? 上卷: 作用域和闭包, this和对象原型 ???? 中卷: 类型和语法, 异步和性能 ???? 下卷:起步上路,es6及更新版本 目录 Part 1 作用域和闭包 chart 1 作用域是什么 1.1 编译原理 1.2 理解作用域 1.3 作用域嵌套 1.4 异常 1.5 ????小结 chart 2 词法作用域 2.1 词法阶段 2.2 欺骗词法 2.3 ????小结 Part 1 作用域和闭包 chart 1 作用域是什么 1.1 编译原理 javas

一只胖胖胖miao 974
上一篇: 读书笔记《你不知道的JavaScript上卷》1.3函数作用域和块作用域
下一篇: 读书笔记《你不知道的JavaScript上卷》1.5作用域闭包
javao_0
博客等级 码龄12年 6粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值