首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

前端基础-JavaScript作用域与JS代码运行

第8章 作用域与JS代码运行 * 作用域:变量可以起作用范围和区域 8.1 全局变量和局部变量 * 全局变量与全局作用域 在任何地方都可以访问到变量就是全局变量,全局变量所在区域就是全局作用域...在 js 中词法作用域规则: 函数允许访问函数外数据. 整个代码结构中只有函数可以限定作用域....; 函数内部如果有变量,则优先使用内部变量,如果函数内部没有,才会使用函数外部变量; 8.5 作用域链 * 只有函数可以制造作用域结构, 那么只要是代码,就至少有一个作用域, 即全局作用域。...凡是代码中有函数,那么这个函数就构成另一个作用域。如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域。 将这样所有的作用域列出来,可以有一个结构: 函数内指向函数外链式结构。...代码局部作用域,函数外部是全局作用域,JS 代码运行分为与解析阶段和执行阶段,变量声明实在与解析阶段,所以变量存在提升,而变量只在自己作用域中起作用,但是自己作用域是可以访问上级作用

1.2K10

js作用

前言 相信自从es6出来之后,你一定多少知道或者已经在项目中实践了部分块级作用域,在函数或者类内部命名变量已经在使用let了,但是你知道它真正作用是什么吗?...又是因为什么我们要用这个块级作用域,本文与你一起探讨块级作用场景以及所有细节问题。...es6之前作用域 特点1 :js只有函数级作用域以及全局两种 特点2 :不通过var声明变量直接赋值也可以用并且可以访问,原理是直接赋值到了window对象属性变量下,两者如果同时定义,那么会覆盖使用...块级作用域 场景一 循环中块级作用域 如果我们有一个遍历循环绑定事件,并且需要把当前指针绑定到对应方法中。...参考文档 前端技术文档-兵哥技术集锦,es6入门 let-mdn文档 变量提升-菜鸟教程 学习js闭包-阮一峰博客

3.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

JS作用

JavaScript作用域有全局作用域和局部作用域 先通过一下代码来体验下作用域 var x = 1; function f1(){ var y = 2; x = 10; console.log...ReferenceError: y is not defined at :7:13 上述代码中变量x就是全局作用域,方法f1作用域也是全局,f1方法中变量y是局部,y作用范围仅限f1方法体内...,离开了f1方法体作用范围,就无法获取到y值,所以上述例子中最后打印y时候是undefined 我们再来看下面的例子 var a = 1; function f1(){ console.log...,让我们来分析一下这段代码预解析过程 1)首先定义了一个全局变量a 2)定义了function f1 3)执行f1方法 ​ 3-1)定义了f1方法体内部局部变量a,a值为undefined ​ 3...-2)输出局部变量a,因为a未赋值,所以这个地方输出undefined ​ 3-3)给局部变量a赋值为3 4)输出全局变量a,a值为1 这就是上面这段代码预解析过程,只要把这段代码预解析搞明白了,

8410

JS作用域和作用域链

JS作用域就是在一定空间范围内对数据进行读写操作。 在JS中一个变量作用域(scope)是程序中定义这个变量区域。 变量有全局变量和局部变量两种。...全局变量作用域是全局性,即在JavaScript代码中,该全局变量处处都有定义。...在这个阶段,作用域链会被初始化,this值也会被最终确定。在执行阶段,代码被解释执行。...此外还要讲下JS作用域中块级作用域。 JS中是没有块级作用域这个概念。 什么是块级作用域呢?...JS并不支持块级作用域,它只支持函数作用域,而且在一个函数中任何位置定义变量在该函数中任何地方都是可见。 那么JS又该怎么拥有块级作用域呢?

4.1K30

JS基础——作用域、作用域链

作用域 [[scope]],函数定义时自动生成一个隐式属性,是用来存储函数作用域链 Scope Chain容器。作用域链是用来存储函数执行上下文 AO和全局执行上下文 GO容器。...函数被定义时,系统会为函数生成[[scope]],[[scope]]中保存该函数作用域链,并从该作用域链起始位置开始存储当前环境作用域链。...{ var b = 2; } var a = 1; b(); } var c = 3; a(); 复制代码...函数a被定义时,会为a生成[[scope]]属性,其中存储a作用域链,并将GO插入到作用域链起始位置。...函数a被执行时,此时函数b也被定义,函数b[[scope]]也在此时生成,其中存储函数b作用域链,并将当前环境作用域链插入函数b作用域链起始位置,即函数aAO和GO。

3.5K10

JS中匿名函数作用

- 匿名函数主要利用函数内变量作用域,避免产生全局变量,影响整体页面环境,增加代码兼容性。(如下图) ? 那么 他作用是什么?...我们首先假设一个场景,一个网站使用了jQuery框架进行了许多DOM操作,然而,在“有心人”操作之下,能够将整个jQuery'$'函数变成其他功能,例如: 在控制台中输入: $=null...,当然,除了jQuery也有其他框架也可能需要有这样匿名函数来保护页面。...只要使用得当,自然能够避免这些不必要麻烦。...---- 个人看法:这个匿名函数也有些类似于ES6中let方法,所声明内容能够有效避免全局变量产生,所以即使在控制台中,也不能够随意改变该页面的内容,我想 let方法出现可能就是为了补充前面的不足吧

2.9K20

js作用域详解

js对象 众所周知,js所有数据类型都是一个对象,例如: var a = 1; console.log 声明a=1;a属于number类型,但是number类型又是number对象,有着以下方法: interface...atest其实是一个window对象下方法对象 var 局部变量作用域 var 声明一个对象,只作用域当前作用域以下。...在闭包函数中声明变量,只能在闭包函数内作用域,以及下层作用域使用,可通过return 对象中,通过return对象中声明方法进行返回,使得上级作用域能成功访问到闭包作用变量 return作用域变量访问情况...总结 1:js万物皆对象,所有变量都是对象类型。...2:js作用域是往下通用,下层作用域可访问上层作用变量,并可修改值 3:js下层作用域变量和上层同名冲突时,下层作用域将覆盖上层变量,但上层作用访问不受影响 4:不适用var方法定义变量,

2.4K10

原生JS | 作用

一个变量在其作用域内是可以被访问,在作用域外不能被访问。 全局作用域与局部作用域 变量执行环境有两种:一种是全局,另一种是局部(如:放在函数里面)。...当有多层作用域时,深层作用域中查找变量时,会按照“当前作用域”到“上层作用域”再到“全局作用域”顺序进行查找,这个查找顺序就可以理解为作用域链。...也就是“案例1”代码中 user与window.user是等价。...查看如下与案例等价代码,更有利于理解案例~ var user = 'HTML5学堂'; function changeName(user){ var user = user; user...= '码匠'; } changeName(user); console.log(user); 如果觉得如上代码还不容易理解,我们可以尝试更换形参名字,会更容易理解一些~如下代码与案例4代码也是等价

4.7K50

了解 JS 作用域与作用域链

(1)作用域 一个变量作用域(scope)是程序源代码中定义这个变量区域。 1....JS声明提前 js函数作用域是指在函数内声明所有变量在函数体内始终是可见。...引入一大段话来解释: 每一段js代码(全局代码或函数)都有一个与之关联作用域链(scope chain)。 这个作用域链是一个对象列表或者链表,这组对象定义了这段代码中“作用域中”变量。...作用域链举例: 在js最顶层代码中(也就是不包括任何函数定义内代码),作用域链由一个全局对象组成。...内部函数在每次定义时候都要微妙差别---在每次调用外部函数时,内部函数代码都是相同,而且关联这段代码作用域链也不相同。

2K10

JS进阶:作用域和作用域链

作用域(Scope) 1.什么是作用作用域是在运行时代码某些特定部分中变量,函数和对象可访问性。换句话说,作用域决定了代码区块中变量和其他资源可见性。...全局作用域有个弊端:如果我们写了很多行 JS 代码,变量定义都没有用函数包括,那么它们就全部都在全局作用域中。这样就会 污染全局命名空间, 容易引起命名冲突。...因为放在里面的所有变量,都不会被外泄和暴露,不会污染到外面,不会对其他库或者 JS 脚本造成影响。这是函数作用一个体现。...函数作用域,是指声明在函数内部变量,和全局作用域相反,局部作用域一般只在固定代码片段内可访问到,最常见例如函数内部。...); // logs 'Hammad' JS 初学者经常需要花点时间才能习惯变量提升,而如果不理解这种特有行为,就可能导致 bug 。

2.5K20

js块级作用

在上一篇中说到了作用域,简单介绍了一下块级作用域,在这里我们来详细介绍一下。 众所周知,在js中函数作用域是常见单元作用域,也是现行大多数js中最普遍设计方案。...但其他类型作用域单元也是存在,并且通过使用其他类型作用域单元甚至可以实现维护起来更加优秀、简洁代码。这就是我们现在要说块级作用域。...let ES6出现对于js开发者来说一个非常开心事情,,其中一点就是他引入了新 let 关键字,提供了除 var 以外另一种变量声明方式。...但是隐式声明块级作用域在代码修改过程中很容易忽略掉他作用域位置,所以我们在写代码时候可以显示声明一下,就是在他前后添加上{},这样整个代码移动不会产生其他问题。...提供了块级作用域,但是我们应该合理代码中使用,结合不同场景使用不同作用域,创造可读、可维护优良代码

2.5K10

关于JS作用域中沉思

scope和closure是javascript中两个非常关键概念,前者JS用多了还比较好理解而且容易体会到,而closure就不一样了。...根据作用范围不同可以分为全局作用域和局部作用域,简单说来就是,花括号{}括起来代码共享一块作用域,里面的变量都对内或者内部级联块级作用域可见,这部分空间就是局部作用域,在{}之外则是全局作用域。...全局作用域 在JavaScript中,作用域是基于函数来界定。也就是说属于一个函数内部代码,函数内部以及内部嵌套代码都可以访问函数变量。...无论引擎多聪明,努力将这些悲观情况作用限制在最小范围内,也无法避免代码会运行得更慢事实。...在一个函数内部定义函数,闭包中会将外部函数自由对象添加到自己作用域中,所以可以通过内部函数访问外部函数属性,这就是js模拟私有变量一种方式。

85200

防止网页被嵌入框架代码

最近,国内开始流行另一种流氓行为:使用框架(Frame),将你网页嵌入网页中。 比如,有一家网站号称自己是"口碑聚合门户",提供全国各个网上论坛精华内容。...1)它故意屏蔽了被嵌入网页网址,侵犯了原作者著作权,以及访问者知情权;   2)大量业者使用是不可见框架,使得框架网页与被嵌入网页视觉上完全相同,欺骗性极高;   3)不良业者在被嵌入网页上方或周围附加广告...在框架网页醒目位置,向访问者提供"移除框架"功能。   C. 不得附加任何广告或恶意代码。 如果你经常使用Google图片搜索,你就会知道,Google就是这样做。...当然,流氓业者不会理睬你正当要求。所以,我写了一段很简单javascript代码,大家只要将它放入网页源码头部,那些流氓就没有办法使用你网页了。... UPDATE 2010.8.15 发布升级版代码,使得除了本地域名以外,其他域名一律无法将你网页嵌入框架。

1.2K40

js作用域、作用域链和它一些优化

前言作用域和作用域链是所有JavaScript开发人员每天都要接触和应用内容。不管是面试中作用域链面试考察,还是日常代码研发中变量与作用域链构建,它身影几乎无处不在。...直到,我多次在编写代码过程中遇到涉及到作用问题后,我才渐渐了解这个问题并去仔细研究。...而这篇文章,就是想要和大家聊聊有关JavaScript作用域以及作用域链那些事情,以及针对它们一些我们在代码中优化小技巧。...这种词法环境外部引用关联关系,构建了一条单向词法环境链条。这就是我们常说作用域链。本质上,作用域链是JavaScript引擎给所执行代码维护一条词法环境链条。...代码执行中对外部作用变量引用,通过这一条链条进行变量查找、读取、修改。代码执行中对某个变量访问大致如下:当代码要访问一个变量时,首先会搜索当前内部词法环境。

1.7K00

你所知道JS变量作用

变量作用域,指的是变量在脚本代码可读、可写有效范围,也就是脚本代码中可以使用这个变量区域。...在ES6之前,变量作用域主要分为全局作用域、局部作用域(也称函数作用域)两种;在ES6及其之后,变量作用域主要分为全局作用域、局部作用域、块级作用域这3种。...变量作用域跟声明方式有密切关系。使用var声明变量作用域有全局作用域和局部作用域,没有块级作用域;使用let和const声明变量有全局作用域、局部作用域和块级作用域。...由于var支持变量提升,所以var变量全局作用域是对整个页面的脚本代码有效;而let和const不支持变量提升,所以let和const变量全局作用域指的是从声明语句开始到整个页面的脚本代码结束之间整个区域...需要注意是,如果局部变量和全局变量同名,则在函数作用域中,局部变量会覆盖全局变量,即在函数体中起作用是局部变量;在函数体外,全局变量起作用,局部变量无效,此时引用局部变量将出现语法错误。

54620
领券