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

JS作用

JS的作用分为全局作用和函数作用。 2|0全局作用 全局作用在页面打开时创建,在页面关闭时销毁。...5|0 是一个可以访问外部(封闭)函数作用链中变量的内部函数。...但是的情况又不同。...作用链的配置机制引出了一个问题,就是只能取得包含函数中任何变量的最后一个值。 所保存的是整个变量对象,而不是某个特殊的变量。...的优点: 不产生全局变量,可以避免全局变量的污染,实现属性私有化的缺点: 会常驻内存,增加内存使用量,使用不当很容易造成内存泄漏,在不用的时候需要删除有3个特性: 函数嵌套函数 在函数内部可以引用外部的参数和变量

1.9K20

理解 js回收机制

3.只要被另外一个作用所引用就不会被回收  是很多语言都具备的特性,在js中,主要涉及到js的几个其他的特性:作用链,垃圾(内存)回收机制,函数嵌套,等等....以及函数a和嵌套函数b的关系,引入函数的执行环境(excution context)、活动对象(call object)、作用(scope)、作用链(scope chain)。...如果整个作用链上都无法找到,则返回undefined。如果函数b存在prototype原型对象,则在查找完自身的活动对象后先查找自身的原型对象,再继续查找。...有三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数和变量不会被垃圾回收机制回收 的定义及其优缺点  是指有权访问另一个函数作用域中的变量的函数,创建的最常见的方式就是在一个函数内创建另一个函数...是javascript语言的一大特点,主要应用包场合主要是为了:设计私有的方法和变量。 一般函数执行完毕后,局部活动对象就被销毁,内存中仅仅保存全局作用。但的情况不同!

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

js函数、作用

fn2() } var a = 2 return fn3 } function fn2(){ console.log(a) } var fn = fn1() fn() //输出1 三、...1、定义: 函数连同它作用链上的要找的这个变量,共同构成 2、特点 最大的特点,就是它可以“记住”诞生的环境,在本质上,就是将函数内部和函数外部连接起来的一座桥梁。...3、用处 的最大用处有两个 可以读取函数内部的变量 暂存数据(让这些变量始终保持在内存中,即可以使得它诞生环境一直存在) 4、举个栗子 如果没有这个,函数执行后,里面speed变量就会被清理掉...} var speedUp = car() speedUp() //1 speedUp() //2 5、经典案例 的经典案例是定义一个变量,一个函数,一个return 函数。...这导致car得不到释放,return的变量也无法释放,对应的所有函数都没有办法释放,就生成了一个 var Car = (function(){ var speed = 0; function

1.4K20

JavaScript进阶--原型原型链、

__proto__.constructor==Person原型链在js中,大部分东西都是对象,数组是对象,函数也是对象,对象更加是对象。...查找属性时,如果到这里还没有找到,那就是undefined了函数和函数内部能访问到的变量加在一起就是一个常规认为,一个函数嵌套另一个函数,两个函数中间的环境,叫,但其实这也是制造一个不会被污染沙箱环境...,实质上,由于js函数作用的存在,所有的函数,都可以是一个function foo(){ var num = 1 function add(){ num++ return num...的函数内部可以使用函数外部的变量,而函数外部无法访问到函数内部的变量,所以正好符合了的定义。...所以只要懂了 JS 的作用,自然而然就懂了

46610

JavaScript 实践+理论(总结篇):作用、this、对象原型

JavaScript 实践+理论(总结篇):作用、this、对象原型 作用 第一章 作用是什么 • 作用:根据标识符查找变量的一套规则。...第五章 作用 1. 何为:当函数可以记住并访问所在的词法作用时,即使函数在当前词法作用之外执行,这时就会产生。 2. 严格意义上来说,一个函数返回另一个函数。 3....空的 IIFE 并不是,虽然通过 IIFE 改造有用了更多的词法作用,但在 IIFE 中的所创建的作用是封闭起来的。只能通过从外传入一个参数到 IIFE 中被使用时,才是。...第五章 原型 1. 当访问对象中一个不存在的属性时,[[Get]] 操作就会查找对象内部的 [[Prototype]] 关联的对象,而这个关联关系就像是嵌套的作用,在查找属性时会对其进行遍历查找。...使用 for...in 遍历对象和 in 操作符时都会查找对象的整条原型链。

5810

JS执行上下文作用

---- 二、作用 1、变量作用 全局变量:在全局声明的变量,任何地方都可以访问 局部变量:在函数里声明的变量,只有函数里内访问 ——几个注意点: 1)声明局部变量必须用var,不然会污染全局变量...—— return 2、函数作用 js没有块级作用,而有函数作用。 函数作用是指:在函数内声明的所有变量在函数体内是始终可见的。...---- 三、 什么是 参考:学习Javascript(Closure)——阮一峰 有权访问另一个函数作用域中的变量的函数 定义在一个函数内部的函数   function f1(){     ...function f2(){       alert(n);     }     return f2;   }   var result=f1();   result(); // 999 f2()就是...的作用 ---- 四、this 全局函数里,this 等于window 函数被作为某个对象的方法调用时,this等于那个对象 匿名函数执行环境具有全局性,this指向window (可以通过call

1.2K30

重学JS-8-函数作用

思维导图 通过下面的思维导图,我们先对JavaScript的函数作用一些基本的了解。 函数作用 作用决定了变量的可访问性,全局作用,局部作用(函数作用)。...let和const具有块作用,块级作用包括在函数内部和在一个代码块内部。 作用链 表示不同作用里面,有多个同名变量,变量的优先次序。...var a; console.log(a); // undefined a = 'banana'; console.log(a); // banana } say(); ...一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是(closure)。...也就是说,让你可以在一个内层函数中访问到其外层函数的作用。在 JavaScript 中,每当创建一个函数,就会在函数创建的同时被创建出来。

33820

重学JS基础-作用链和

一,作用和作用链 1.全局作用 JS有一个全局对象,window,在全局声明的变量都属于window的属性,未使用声明符声明的属性也是window的属性。...当内部函数被保存到外部时,将会生成。...生成后,内部函数依旧可以访问其所在的外部函数的作用。 1.原理 在内部函数被定义的时候会创建一个属于内部函数的scope属性保存着的作用链,它会直接继承父函数的作用链....2.避免的方法 (1)立即执行函数 (function(){ var a; //code }()); (function(){ var a; //code }...4.的优缺点 的好处 希望一个变量长期存储在内存中 避免全局变量的污染 私有成员的存在 用于缓存的坏处 容易造成内存泄漏 使用定义对象的私有变量 var Person = (function

55620

js

目录 的概念 的用途 代码实例 注意点 两个代码片段的对比 的概念 简单来说,就是定义在一个函数内部的函数 的用途 可以读取函数内部的变量 让这些变量的值始终保持在内存中...f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制回收。...nAdd的值是一个匿名函数(anonymous function),而这个匿名函数本身也是一个。 函数调用相当于后面有两个括号,因为函数f1返回的是函数名f2。...注意点及解决方法 由于会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用,否则会造成网页的性能问题,在IE中可能导致内存泄露。...会在父函数外部,改变父函数内部变量的值。 解决方法:不要随便改变父函数内部变量的值。 返回时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

2.3K30

JS

定义 是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。...就是在另一个作用域中保存了一份它从上一级函数或者作用得到的变量,而这些变量是不会随上一级函数的执行完成而销毁。 前提条件 计算机中的内存变量如果有被引用着的话,则系统是不会将之回收的。...只要我们能够一直持有这个引用,则就可以令局部变量避免被回收——这是概念成立的前提 用途 可以读取到函数内部的变量 可以让函数内部变量保持在内存中 避免全局变量的污染 私有成员的存在...注意事项 会让函数中的变量都被保存到内存中,内存消耗较大,不能滥用,否则会导致性能和内存泄漏问题(退出函数之前可以将不用的局部变量全部删除) 能改变父函内部变量的值,一定要小心使用 示例

2.5K110

JS

JS用法给开发带来了极大的便利,它的使用方式非常自然,以至于很多同学并不很了解,却可以在实际开发中顺畅的使用了 例如下面的代码,给button添加一个点击事件,很多人经常这么写,实际上这就是一个...要了解,需要先了解下JS变量的作用 变量的作用无非就是两种:全局变量和局部变量 特点是 函数内部可以访问外部变量,函数外部不能访问函数内的变量 例如 ?...这个实现方式就是 什么是 其实就是将函数内部和函数外部连接起来的一座桥梁,可以让函数外部的代码访问函数内容变量,可以把简单理解成“定义在一个函数内部的函数” 包在子作用域中保存了一份在父级作用取得的变量...,这些变量不会随父级作用的销毁而销毁,因为他们已经常驻内存了 应用示例 (1)实现公共、私有作用控制 既然可以对外提供访问内容变量的方式,就可以用这个特点实现类似 public private...原因 第一种方式出现错误,是因为在for循环结束后,变量item的值已经变为了最后一项,所以当点击事件执行时,读取的信息总是最后一项的信息 而第二个方式就是利用了会把父级变量保存到自己作用的特点

4.2K40

JS

JS 概念 能够读取其他函数内部变量的函数 定义在一个函数内部的函数,内部函数持有外部函数内变量的引用 简单来说,是指可以访问另一个函数作用变量的函数,一般是定义在外层函数中的内层函数,但并不仅仅是一个函数...变量作用 两种:全局变量、局部变量。js中函数内部可以读取全局变量,函数外部不能读取函数内部的局部变量。...外层函数返回内层函数的对象,并且外层函数被调用,结果保存在一个全局的变量中 从外部读取函数内部的变量 function f1(){ var n = 123; function f2(){ //f2是一个...alert(n) } return f2; } js链式作用:子对象会一级一级向上寻找所有父对象的变量,反之不行。...利于代码封装 原因:f1是f2的父函数,f2被赋给了一个全局变量,f2始终存在内存中,f2的存在依赖f1,因此f1也始终存在内存中,不会在调用结束后,被垃圾回收机制回收

2.5K50

JS

在理解以前.最好能先理解一下作用链的含义,简单来说,作用链就是函数在定义的时候创建的,用于寻找使用到的变量的值的一 个索引,而他内部的规则是,把函数自身的本地变量放在最前面,把自身的父级函数中的变量放在其次...,把再高一级函数中的变量放在更后 面,以此类推直至全局对象为止.当函数中需要查询一个变量的值的时候,js解释器会去作用链去查找,从最前面的本地变量中先找,如果 没有找到对应的变量,则到下一级的链上找...了解了作用链,我们再来看看js的内存回收机制,一般来说,一个函数在执行开始的时候,会给其中定义的变量划分内存空间保存,以备后面的语句所用,等到函数执行完毕返回了,这些变量就被认为是无用的了.对应的内存空间也就被回收了...(自由变量))一起保存起来.也就是构建一个,这些变量将不会被内存回收器所回收,只有当内部的函数不可能被调用以后(例如被删除了,或者没有了指针),才会销毁这个,而没有任何一个引用的变量才会被下一次内存回收启动时所回收...Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量。

2.5K50

作用

{ console.log(bar); // ReferenceError let bar = 2; } # 垃圾收集 另一个块作用非常有用的原因和回收内存垃圾的回收机制相关。...当函数可以记住并访问所在的词法作用,即使函数是在当前词法作用之外执行,这时就产生了。...# 的实质 当函数可以记住并访问所在的词法作用时,就产生了,即使函数是在当前词法作用之外执行。...bar() 依然持有对该作用的引用,而这个引用就叫作。 bar() 函数在定义时的词法作用以外的地方被调用。使得函数可以继续访问定义时的词法作用。...在定时器、事件监听器、Ajax请求、窗口通信、Web Workers 或者任何其他的异步(或者同步)任务中,只要使用了回调函数 ,实际上就是在使用

67220

&& 原型变态真题

obj.get('age')); // 18console.log('name--obj:', obj.get('address')); // undefined通过以上代码可知,obj是个立即执行函数,内部一个...根据原型可知,当自身没有没有某个属性/方法时,就会往原型上查找,同时再运用object的get拦截方法,进而从中可找到破解该题的方法Object.defineProperty(Object.prototype...newObj.name = 'Tom';console.log('sex--obj:', obj.get('sex')); // { name: 'Tom', age: 18 }从上述代码可知,就是利用了原型的这么一个漏洞解决这个问题...,那么问题来了,如何解决这个漏洞,获取对象属性的时候,判断下该属性是不是自由属性而非原型上的属性,上代码:const obj = (function () { const person = {...return person[key]; } return undefined; } }})()或者,定义对象时候规定对象没有原型

20440
领券