你不知道的JavaScript(上卷)- - 书本知识点记录

function test(a) {

b = a * 5; // 报错 b没有被定义

let b;

console.log(b);

}


function test(a) {

b = a * 5;

var b; // 正常运行 var会变量提升

console.log(b);

}

console.log(b) // 报错 找不到b


function test(a) {

b = a * 5;

// 正常运行 函数作用域找不到b 就会去外层找

console.log(b);

}

var b;

总结:

  • 如果函数内部找不到 就会往外层找 直到到最外层的Global中

  • 在函数中 就算使用 var 定义的变量 也不会被提升到全局的 Global中,但是还是会变量提升

  • 最好的建议还是使用 let 和 const 因为这里的两个是不会变量提升的,不容易出错

闭包不污染全局变量

function test1() {

var a = 1

}

test1() // 正常运行


(function test2() {})();

test2(); // 报错 找不到 test2这个函数

总结:

  • 正常使用函数确实是可以让函数里面的成员变量私有化,但是函数自己本身是被定义和赋值到全局对象中了,这个或多或少也是一种污染

  • 使用闭包可以解决这个问题,函数变量名被隐藏在自身中意味着不会非必要地污染外部作用域

  • 当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这时就产生了闭包。

块作用域

if(true){

var a = 5;

}

console.log(a); // 5


if (true) {

let b = 5;

}

console.log(b); // ReferenceError: b is not defined

总结:

  • 在过去 JS 是没有块级作用域这个概念的,只有函数作用域,因为使用var定义的变量都会被提升到最上面(如果var定义在函数里面也会被提升到函数的最上面)

  • 但是好在ES6推出了let和const关键字,让JS也拥有了块级作用域

变量提升的细节

a = 2;

var a;

console.log( a );

// 编译后的代码

var a;

a = 2;

console.log( a ); // 答案是2


console.log( a );

var a = 2;//浏览器解析到这里 编译器会将这段代码编译成 var a; a = 2; var a会被提到最前面

// 最终经过编译的最终代码是

var a

console.log( a ); // undefined 因为 a只是定义还没有赋值 所以是 undefined

a = 2


foo(); // 不是 ReferenceError, 而是 TypeError!

var foo = function bar() { // … }; // 这里不是函数声明 而是函数表达式

// 编译器处理后

var foo

foo() // TypeError 类型错误 还没声明 foo是函数就使用函数的调用方法

foo = function bar(){}


foo(); // 1

var foo;

function foo() { console.log( 1 ); } // 函数会被提升到最前面,换句话说,函数最先提升

foo = function() { console.log( 2 ); };

总结:

  • 只有声明本身会被提升,赋值和其他的逻辑会留在原地

  • var 和 函数声明都会提升

  • 函数声明会被提升,但是函数表达式却不会被提升

  • 函数会首先被提升,然后才是变量

闭包

function setupBot(name, selector) {

$( selector ).click( function activator() {

console.log( "Activating: " + name );

} );

}

setupBot( “Closure Bot 1”, “#bot_1” );

setupBot( “Closure Bot 2”, “#bot_2” );

// 以上的函数就是一个闭包


function foo() {

var a = 2;

function bar() {

console.log( a );

}

return bar;

}

var baz = foo(); baz(); // 2 —— 朋友,这就是闭包的效果。

总结:

  • 函数是在它本身的词法作用域以外执行。

  • 只要使用了回调函数,实际上就是在使用闭包!

循环和闭包

for (var i=1; i<=5; i++) {

setTimeout( function timer() {

console.log( i );

}, i*1000 );

}

// 结果: 输出5次6

// 因为setTimeout()是一个异步的函数,for循环结束了才会执行setTimeout,而for循环结束的时候 i是等于6的 所以最终会输出5次6

// 因为我们试图在每次循环的时候都能保存下一个i的副本,但是实际上因为作用域,每次都是同一个i,最终i被赋值成了6,所以输出了5次6

解决方案:

for (var i=1; i<=5; i++) {

(function(j) {

setTimeout( function timer() {

console.log( j );

}, j*1000 );

})( i );

}

// 这样就可以解决了, 每次运行的时候都将i存进一个立即执行函数里面,立即执行函数又作用域又可以防治变量污染,就可以解决这个问题了

最优方案:

for (let i=1; i<=5; i++) {

setTimeout( function timer() {

console.log( i );

}, i*1000 );

}

// let 声明,可以用来劫 持块作用域,并且在这个块作用域中声明一个变量

函数的this绑定

this绑定如果分类的话可以分为四类:默认绑定、显示绑定、隐式绑定、new绑定

  • 默认绑定

function demo(){

cconsole.log(this.a)

}

var a = 2

demo() // 2
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。

资料领取方式:点击这里获取前端全套学习资料

css源码pdf

JavaScript知识点

最后

javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。

资料领取方式:点击这里获取前端全套学习资料

[外链图片转存中…(img-JCElpiK6-1713105658084)]

[外链图片转存中…(img-oAwWSa2x-1713105658084)]

AI使能的SVD算子:基于深度学习的矩阵分解方法 奇异值分解(Singular Value Decomposition, SVD)是线性代数中一种重要的矩阵分解方法,广泛应用于信号处理、数据降维、推荐系统等领域。传统SVD算法虽然精确,但在处理大规模矩阵时面临计算复杂度高、内存需求大等问题。本文提出了一种基于深度学习神经网络的SVD算子实现方法,完全摒弃传统数值算法,仅使用PyTorch框架构建的神经网络模型来完成大规模信道矩阵的SVD分解与还原。 阅读详情

相关推荐

Apk脱壳圣战之---脱掉“梆梆加固”的保护壳

一、前言 现如今Android用户的安全意识不是很强,又有一些恶意开发者利用应用的名字吸引眼球,包装一个恶意锁机收费的应用,在用户被骗的安装应用之后,立马手机锁机,需要付费方可解锁。这样的恶意软件是非常让人痛恨的。所以本文就用一个案例来分析如何破解这类应用,获取解锁密码,让被骗的用户可以找回爽快! 二、分析软件锁机原理 本文用的是一款叫做:安卓性能激活.apk,关于样本apk文件后面会...

尼古拉斯.赵四的博客 5060

你不知道的JavaScript 上卷 知识梳理

第1章:作用域是什么

Turnip的博客 643

智能驾驶感知模块评测实战:如何用回灌测试提升BEV模型准确率(附数据集处理技巧)

本文深入探讨了如何通过诊断型回灌测试系统性地提升智能驾驶BEV感知模型的准确率与鲁棒性。文章详细拆解了从场景切片、时空对齐到多维指标分析的完整评测流水线,并针对BEV模型特有的深度估计、特征融合等环节提供了优化思路,旨在帮助工程师将海量路采数据转化为精准的模型迭代燃料。

weixin_29045585的博客 395

一篇了解Java反射

1.Class也是类,也继承Object类2.Class类对象不是new出来的,而是系统创建的 (都是通过Classloader类创建的)3.每个类的Class类对象,在内存中只有一份,因为类只加载一次。

qq_44005305的博客 264

全国排污许可证数据

from tkinter import * # 导入窗口控件 import tkinter.filedialog import requests from lxml import etree from tkinter import ttk from bs4 import BeautifulSoup import webbrowser # 调用浏览器打开网页 from tkinter import messagebox # 弹出提示框 from openpyxl import Workbook imp.

Newnotes的博客 3385

QEMU理解与分析系列(11):QEMU内存机制

在物理机上,CPU 对于内存的访问在保护模式下通过分段分页的形式实现。在该模式下,CPU 访问时使用的是虚拟地址,通过 MMU 映射到物理地址,将虚拟地址转换为物理地址才能访问实际的物理内存。同样的,虚拟机模拟的物理机同样需要有上述的机制,也需要有从虚拟地址到物理地址的转换。这里需要注意,模拟的物理机的物理地址本质上是 qemu 的虚拟地址。

swh547的博客 49

你不知道的JavaScript上卷笔记

对象的.constructor默认指向一个函数,而这个函数也叫做prototype的引用指向的对象,constructor并不标识对象被它构造,JavaScript的继承需要手动修改prototype.constructor的指向。对象的属性名永远是字符串。Js中对象都有一个特殊的内置属性【prototype】,指向它的原型对象,访问一个对象中不存在的属性时,就会沿着这条prototype链查找。this是在运行时绑定的,并不是在编写时绑定的,它取决于函数调用的各种条件,与函数声明的位置没有任何关系,

weixin_44023357的博客 179

93.华为路由器:IPSec加密GRE通道(GRE over IPsec)

IPSec加密GRE通道 由于GRE隧道不提供安全性保障,使用ipsec加密gre隧道是现网中比较常用的VPN部署,它的加密方式分为两种: 可以使用IPsec来加密隧道进行传输,叫做IPsec over GRE; 加密数据流后从隧道传输,称为GRE over IPsec。 下面将配置一个简单的IPsec over GRE实验。 一、搭建模拟环境 首先我们先搭建环境,先根据拓扑图把基本的IP地址配好,然后分别在AR1、AR3加两条静态路由,使得两个公网互通。 [AR1]in g0/0/0 [AR

迷逝 1万+

《你不知道的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

【WRF-Chem工具】pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

WW、forever的博客 210

YOLOv8改进 | 细节涨点篇 | DySample一种超级轻量的动态上采样算子(效果完爆CARAFE)

本文给大家带来的改进机制是一种号称超轻量级且有效的动态上采样器——DySample。与传统的基于内核的动态上采样器相比,DySample采用了一种基于点采样的方法,相比于以前的基于内核的动态上采样器,DySample具有更少的参数、浮点运算次数、GPU内存和延迟。此外,DySample在包括语义分割、目标检测、实例分割、全景分割和单目深度估计在内的五个预测任务中,性能均优于其他上采样器(截至目前最有效的上采样算子)。

Snu77的博客 1万+

你不知道的JavaScript(上卷)作用域和闭包

作用域 JavaScript 学习

weixin_43358822的博客 700

Android 13 wificond讲解

Android 13 wificond讲解

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 2932

你不知道的JavaScript(上卷)- - 书本知识点记录,前端开发学习

给大家分享一些关于HTML的面试题,有需要的朋友可以戳这里免费领取,先到先得哦。[外链图片转存中…(img-KAzoUMdc-1712293739912)]由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)给大家分享一些关于HTML的面试题,有需要的朋友可以戳这里免费领取,先到先得哦。[外链图片转存中…(img-aydwBSeN-1712293739912)]

2401_84093054的博客 738

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

你不知道的JavaScript(上卷)- - 书本知识点记录,2024年最新CSS清除默认样式

今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。所以看完之后,还是多多行动起来吧!可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。一个人可以走的很快,但一群人才能走的更远。

m0_57472099的博客 924

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

你不知道的JavaScript(上卷)- - 书本知识点记录,高级前端面试题及答案

但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。// 因为我们试图在每次循环的时候都能保存下一个i的副本,但是实际上因为作用域,每次都是同一个i,最终i被赋值成了6,所以输出了5次6。} // 函数会被提升到最前面,换句话说,函数最先提升。

2401_83621499的博客 1086

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

2024年前端最新你不知道的JavaScript(上卷)- - 书本知识点记录,前端开发需要哪些基础

推荐一些系统学习的途径和方法。每个Web开发人员必备,很权威很齐全的Web开发文档。作为学习辞典使用,可以查询到每个概念、方法、属性的详细解释,注意使用英文关键字搜索。里面的一些 HTML,CSS,HTTP 技术教程也相当不错。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】HTML 和 CSS:小黄书是公司带我的姐姐推荐给给我看的,她跟我说JS好才是王道,有空把三本都看了,于是我在摸鱼的时候看完了小黄书上册…

2401_84446513的博客 697

《你不知道的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

JavaScript笔记 | this和对象原型 |《你不知道的JavaScript(上卷)》第二部分

JavaScript this和对象原型 《你不知道的JavaScript(上卷)》

qq_42376600的博客 438

你不知道的JavaScript:深潜JS核心机制的奇妙之旅!

朋友们,今天咱们来聊聊前端圈子里那个传奇系列——“You Don’t Know JS”(中文译名《你不知道的JavaScript》)。别被书名吓到,这可不是那种板着脸教训人的技术书,更像是位叼着雪茄的老船长,带着你在JavaScript的惊涛骇浪里玩冲浪!最妙的是,当你真正吃透这些原理,新出的框架/工具学起来快得飞起!市面上99%的JS教程教你怎么用工具,而这套书直接把你拽进引擎盖下面,让你亲眼看看发动机怎么转的!那章,才恍然大悟——原来不是JavaScript疯了,是我根本不懂它的游戏规则!

fintechdev的博客 910

《你不知道的JavaScript(上卷)》4.7 变量查询的两种形式

《你不知道的JavaScript(上卷)》 传统的编译语言,程序的源代码执行之前经历三个步骤: 词法分析 语法分析 代码生成 引擎:从头到尾的负责整个JavaScript程序的编译及执行过程 编译器:负责语法分析及代码生成 作用域:负责收集并维护由所有声明的标识符(变量)组成的一系 列。 查询,并遵循规则,确定当前执行的代码对这些标识符的访问权限 ...

ComeVl的博客 257

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

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

Floyd的博客 292

你不知道的JavaScript——作用域以及作用域链

简介 本文是我在阅读书籍《你不知道的JavaScript-上卷》时的总结和看法。主要是对一些重要知识点的梳理和归纳,并用自己的思路去进行书写成记录来便于日后的回顾和加深知识点的认识,所描述内容仅供学习参考。 作用域以及作用域链 作用域 以前一直不知道什么是作用域,或者说只知道作用域,而不知道他实际代表的含义。 作用域实际是浏览器引擎在查询变量的一套规则。按我的理解,作用域存储了已经被声明的变量,以及这些被声明的变量所代表的值,当引擎在进行 LHS 或者 RHS 查询的时候,就需要到对应的作用域进行查询。

weixin_45449964的博客 269

《你不知道的JavaScript》 记录

前言,简单记录你不知道的javascript 书本的例子。 声明提升 ( 第四章 ) 1、var a = 2; 可能会认为这是一个声明。但JavaScript 实际上会将其看成两个声明:var a; 和 a = 2 ; 第一个定义声明是在编译阶段进行的。第二个赋值声明会被留在原地等待执行阶段。 2、函数声明会被提升,但函数表达式却不会被提升。 3、提升细节: 函数会首先被提升,然后才是...

Turbo的博客 413
上一篇: 代码重构经验(1)
下一篇: 划分子网和构造超网的学习
2401_84091663
博客等级 码龄3年 3157粉丝 212原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值